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$/ 这将匹配如何捕获一个正则表达式中的前数字?
一些正则表达式比向前表现更好.所以有时使用性爱者而不是正则表达式是有用的.
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上的性别帖子.