Regex 具有Perl风格语法的两位数Grep

Regex 具有Perl风格语法的两位数Grep,regex,perl,grep,Regex,Perl,Grep,所以我要看一下O'Reilly的正则表达式袖珍参考 我发现了一个例子: /^\d{1,6}$/ 应该匹配任何1-6位数字 然而,当我试图在Ubuntu上通过带有PCRE语法的grep运行它时,它只匹配1位数字 我是这样运行的: grep -P "^\d{1,6}^" * 所以我用Perl对它进行了一次尝试,它似乎按照预期工作: $example = 600; if($example =~ /^\d{1,6}^/){ print "Gotcha! \n"; # fires as

所以我要看一下O'Reilly的正则表达式袖珍参考

我发现了一个例子:

/^\d{1,6}$/
应该匹配任何1-6位数字

然而,当我试图在Ubuntu上通过带有PCRE语法的grep运行它时,它只匹配1位数字

我是这样运行的:

grep -P "^\d{1,6}^" * 
所以我用Perl对它进行了一次尝试,它似乎按照预期工作:

$example = 600; 

if($example =~ /^\d{1,6}^/){
     print "Gotcha! \n"; # fires as it should 
} else { 
     print "failed \n"; #doesn't fire
} 

$counterexample = 6000000000000000000000; 

if($counterexample =~ /^d{1,6}$/{ 
     print "This shouldn't be \n"; # does not fire, as intended
} else { 
     print "also correct \n"; # Fires as intended 
} 
那么,grep的行为不应该与-p标志相同吗

我肯定我错过了一些重要的东西

更新

已将秒
^
更正为
$

grep -P "^\d{1,6}$" * 
我注意到它似乎可以处理像这样的文件

//example file.txt works as intended 
12
123
12345
1234567

//but this doesn't work 
600 500 20 

// Just matches the first one 

以下工作很好:

$ cat > 'test'
qwer
1234
1234567
12
qwer
^C
$ grep -P "^\d{1,6}$" *
test:1234
test:12
您使用第二个
^
是打字错误,还是您真的打算使用它而不是
$

更新

为什么它与新的示例相匹配<代码>600 500 20

这些数字之间有空格,您使用的正则表达式由行的开始和结束的锚定
^
$
限定。如果你想让这些数字匹配,你就必须使用单词边界锚<代码>/\b\d{1,6}\b/


换句话说,您的正则表达式按预期运行。

输入错误。用你的例子试过了,成功了。已编辑问题,已更新您对问题的更改。谢谢!现在我觉得这很有道理。