Использование регулярного выражения в perl, и оно не работает должным образом - PullRequest
0 голосов
/ 24 февраля 2020

Это моя первая попытка использования регулярных выражений вообще, и моя первая попытка использования perl, так что это была борьба. Я пишу al oop, чтобы посмотреть через USB-образ и вытащить все номера телефонов с этим

my $phonefilename = 'phoneoutput.txt';
open(FFF, "<usb256.001");
open(FH, '>', $phonefilename) or die $!;
my $phonenumber;
while(<FFF>)
{
    if (/^\+[[:space:]]*[0-9][0-9.[:space:]-]*(\([0-9.[:space:]-]*[0-9][0-9.[:space:]-]*\))?([0-9.[:space:]-]*[0-9][0-9.[:space:]-]*)?([[:space:]]+ext.[0-9.[:space:]-]*[0-9][0-9.[:space:]-]*)?/i)
    {
        $phonenumber = $1;
        print FH "$phonenumber\n";
    }
}
close(FFF);

, и я продолжаю получать Использование неинициализированного значения $ phonenumber в конкатенации (.) Или строке в строке 29 datafinder.pl любая помощь?

1 Ответ

0 голосов
/ 24 февраля 2020

Просто для забавы предположим, что мы имеем дело с североамериканским номером , который состоит из 11 цифр

  • pos1: 1 - Северная Америка
  • pos2 : 2-4 - код города
  • pos3: 5-7 - группа 1
  • pos4: 8-11 - группа 2

Фрагмент кода: проверка включена проверка того, что номер состоит только из 11 цифр

use strict;
use warnings;
use feature 'say';

my %number;                                         # has to store number

while(my $data = <DATA>) {                          # walk through data
    chomp $data;                                    # snip eol
    $data =~ tr/0-9//cd;                            # remove spaces, brakets, dashes
    if( length($data) != 11 ) {                     # is number consist of 11 digits?
        say '-' x 40 . "\n"                         #   no  = invalid
          . "Number:  $data is invalid";
    } else {                                        #   yes = valid
        $data =~ /(\d)(\d{3})(\d{3})(\d{4})/;       #   regex and capture
        @number{qw/country area group1 group2/} = ($1,$2,$3,$4);    # store
        say '-' x 40 . "\n"
          . "Belongs to "
          . ($number{country} == 1 ? "North America" : "None North America");
        say "Number:  $data\n"                      #   output
          . "Record:  $number{country} ($number{area}) $number{group1}-$number{group2}\n"
          . "Country: $number{country}\n"
          . "Area:    $number{area}\n"
          . "Group1:  $number{group1}\n"
          . "Group2:  $number{group2}";
    }
}

__DATA__
1 (309) 123-4567
1 312-123-4567
1 (815) 123-456
3 (421) 123-4567
3 (426) 123-4567
17731234567
1872123456

Выход

----------------------------------------
Belongs to North America
Number:  13091234567
Record:  1 (309) 123-4567
Country: 1
Area:    309
Group1:  123
Group2:  4567
----------------------------------------
Belongs to North America
Number:  13121234567
Record:  1 (312) 123-4567
Country: 1
Area:    312
Group1:  123
Group2:  4567
----------------------------------------
Number:  1815123456 is invalid
----------------------------------------
Belongs to None North America
Number:  34211234567
Record:  3 (421) 123-4567
Country: 3
Area:    421
Group1:  123
Group2:  4567
----------------------------------------
Belongs to None North America
Number:  34261234567
Record:  3 (426) 123-4567
Country: 3
Area:    426
Group1:  123
Group2:  4567
----------------------------------------
Belongs to North America
Number:  17731234567
Record:  1 (773) 123-4567
Country: 1
Area:    773
Group1:  123
Group2:  4567
----------------------------------------
Number:  1872123456 is invalid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...