为什么在perl中这个正则表达式不匹配行

时间:2017-02-20 17:38:33

标签: regex perl

我对perl代码做了一些更改,但我无法理解为什么下面的正则表达式与输入行不匹配。

my $regex='^(780200703303)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+([1-9]\\d*)\\s+([1-9]\\d*)\\s+$';
my $line='780200703303    2            0            3            0            0            0            0            0            0            1 ';
if ( $line =~ m/$regex/ ) 
{
    print "Matched";
}

提前致谢

2 个答案:

答案 0 :(得分:6)

因为0[1-9]\d*不匹配。

您是否考虑过使用以下内容:

my @fields = split ' ', $line;
if ($fields[0] == 780200703303) {
   ...
}

答案 1 :(得分:3)

您的测试字符串与正则表达式不匹配。

my $regex='\\s+([1-9]\\d*)\\s+([1-9]\\d*)\\s+$';
my $line='            0            1 ';

0([1-9]\d*)

不符

使用qr operator让你的正则表达式更简单。

my $regex= qr/\s+([1-9]\d*)\s+([1-9]\d*)\s+$/;