【发布时间】:2020-09-18 05:24:05
【问题描述】:
我有以下模式,它应该适用于 C++ 正则表达式、perl 和 grep。有谁知道为什么 0000 的字符串在减号 - 之后不匹配?
$ echo AB 00000-0000 | grep -Po "(\w{2}\s*\d{5}(−\d{4})?)"
AB 00000
$ echo AB00000-0000 | grep -Po "(\w{2}\s*\d{5}(−\d{4})?)"
AB00000
【问题讨论】:
我有以下模式,它应该适用于 C++ 正则表达式、perl 和 grep。有谁知道为什么 0000 的字符串在减号 - 之后不匹配?
$ echo AB 00000-0000 | grep -Po "(\w{2}\s*\d{5}(−\d{4})?)"
AB 00000
$ echo AB00000-0000 | grep -Po "(\w{2}\s*\d{5}(−\d{4})?)"
AB00000
【问题讨论】:
你的减号不是你想象的那样。当我将您的代码复制并粘贴到我的 shell 中时,我看到:
echo AB00000-0000 | grep -Po "(\w{2}\s*\d{5}(\342\210\222\d{4})?)"
当我使用普通的旧减号(而不是 \342\210\222,这就是我得到的:
$ echo AB00000-0000 | grep -Po "(\w{2}\s*\d{5}-\d{4}?)"
AB00000-0000
【讨论】:
看起来您在正则表达式中使用的破折号文字与输入中的破折号不同。输入破折号是一个小 -,而您的正则表达式中的破折号稍长。不确定您的输入设备有何不同,但是当我将您的破折号换成短破折号时:-您的表达效果很好。
(\w{2}\s*\d{5}(-\d{4})?)
这是一个可以帮助你的好工具,我经常使用它: https://regex101.com/
【讨论】: