試圖讓 perl 識別并提取一個字串中的電話號碼,該字串具有在檔案中找到的一些奇怪的格式:
my $str = 'Phone:
(312) 555-1212 _
';
我試過這個解決方案,但它最終從字串中提取了所有數字:
my @all_nums = $element =~ /(\d )/g;
if (@all_nums) {
my $ph = join('-', @all_nums);
print "PHONE NO: $ph\n";
push(@elements_found, $ph);
}
任何幫助是極大的贊賞。
uj5u.com熱心網友回復:
為數字格式嘗試更精確的正則運算式:
my @all_nums = $element =~ /\((\d )\) (\d )-(\d )/g;
if (@all_nums) {
my $ph = join('-', $1, $2, $3);
print "PHONE NO: $ph\n";
push(@elements_found, $ph);
}
uj5u.com熱心網友回復:
下面的演示代碼片段逐行讀取資料塊,如果行中存在電話,則提取電話,否則跳過讀取下一行。如果在線路中找到電話號碼,則將其列印在螢屏上。
use strict;
use warnings;
use feature 'say';
my $re = qr/(\(\d{3}\) \d{3}\-\d{4})/;
while( <DATA> ) {
next unless /$re/;
say "-- $1 --";
}
__DATA__
Phone:
(312) 555-1212 _
Call customer service at (328) 371-9302 for an assistance
輸出
-- (312) 555-1212 --
-- (328) 371-9302 --
以下代碼示例將DATA塊讀入變數$data,然后借助正則運算式將所有電話號碼提取到陣列中@phones,然后將它們列印在螢屏上。
use strict;
use warnings;
use feature 'say';
my $re = qr/(\(\d{3}\) \d{3}\-\d{4})/;
my $data = do { local $/; <DATA>; };
my @phones = $data =~ /$re/g;
say for @phones;
__DATA__
Phone:
(312) 555-1212 _
Call customer service at (328) 371-9302 for an assistance
輸出
(312) 555-1212
(328) 371-9302
注意:驗證電話號碼的任務比這些代碼示例中演示的要復雜
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/368290.html
