如何解析Perl中的电话号码?

use*_*757 1 regex perl phone-number

我试图抓住手机已知行号前面的任何数字,如果它们存在(在Perl中).没有破折号,只有数字.

例如,假设我知道行号将始终为8675309. 8675309可能有也可能没有前导数字,如果是,我想捕获它们.前导数字的数量并没有真正的限制.

$input          $digits       $number
'8675309'       ''            '8675309'
'8008675309'    '800'         '8675309'
'18888675309'   '1888'        '8675309'
'18675309'       '1'           '8675309'
'86753091'      not a match
Run Code Online (Sandbox Code Playgroud)

/8675309$/ 这将匹配如何捕获一个正则表达式中的前数字?

dao*_*oad 9

一些正则表达式比向前表现更好.所以有时使用性爱者而不是正则表达式是有用的.

my $pn = '18008675309';

reverse($pn) =~ /^9035768(\d*)/;
my $got = reverse $1;
Run Code Online (Sandbox Code Playgroud)

正则表达式更清晰,避免了大量的后向跟踪,以牺牲一些笨拙的成本来扭转输入和捕获的值.

在这种情况下,回溯增益小于使用普通电话号码提取正则表达式时的回溯增益:

Regex:   /^(\d*)\d{7}$/
Sexeger: /^\d{7}(\d*)/
Run Code Online (Sandbox Code Playgroud)

这种技术很有用,存在一类问题.有关更多信息,请参阅Perlmonks上的性别帖子.