Regex 正则表达式可以工作,但不能与Windows上bash中的egrep一起工作

Regex 正则表达式可以工作,但不能与Windows上bash中的egrep一起工作,regex,windows,bash,grep,Regex,Windows,Bash,Grep,我有一个文本文件test.txt,包含以下内容: 20001 200134 20103040 203004038002 我想使用以下egrep命令来显示匹配项: egrep '^(?!(?:.*?0){6,})(?=(?:.*?0){3,})[0-9]+$' test.txt 然而,由于某些原因,egrep没有输出任何东西。但我可以看到我的正则表达式在regex101链接上起作用: 我用白鹭错了吗?因为我不知道我做错了什么。顺便说一下,我正在Windows上使用bash。环视符号(?!在e

我有一个文本文件
test.txt
,包含以下内容:

20001
200134
20103040
203004038002
我想使用以下egrep命令来显示匹配项:

egrep '^(?!(?:.*?0){6,})(?=(?:.*?0){3,})[0-9]+$' test.txt
然而,由于某些原因,egrep没有输出任何东西。但我可以看到我的正则表达式在regex101链接上起作用:


我用白鹭错了吗?因为我不知道我做错了什么。顺便说一下,我正在Windows上使用bash。

环视符号
(?!
egrep
中不受支持,但是如果支持,您可以尝试
grep-p
,使其与perl兼容

看起来你想要匹配包含3-5倍零的数字

与此匹配的另一个选项是将0+乘以一个数字
[1-9]
与3乘以一个零和2乘以一个可选零进行匹配

您可以将此模式用于egrep:

^[1-9]*0[1-9]*0[1-9]*0[1-9]*0?[1-9]*0?[1-9]*$

例如:

egrep '^[1-9]*0[1-9]*0[1-9]*0[1-9]*0?[1-9]*0?[1-9]*$' test.txt

请尝试
grep-P
,在ERE中不支持lookarounds
我的regex在regex101上工作
确切地说,您的regexp在网站regex101上工作,不多也不少。这并不意味着它在任何给定的命令行中也工作。匹配包含3-50的数字的ERE只是
^([1-9]*0){3,5}[1-9]*$
你说得对,它更短更干净。