负面的lookbehind断言正则表达式与grep -P有意想不到的结果
发布时间:2020-12-14 06:07:40 所属栏目:百科 来源:网络整理
导读:我正在测试以下否定的lookbehind断言,我想了解结果: echo "foo foofoo" | grep -Po '(?!foo)foo' 它打印出来 foofoofoo 我期待只打印两个第一个foo,’echo foo foofoo’但不是第三个,因为我的断言应该意味着找到’foo’之前没有’foo’. 我错过了什么?为什
我正在测试以下否定的lookbehind断言,我想了解结果:
echo "foo foofoo" | grep -Po '(?<!foo)foo' 它打印出来 foo foo foo 我期待只打印两个第一个foo,’echo foo foofoo’但不是第三个,因为我的断言应该意味着找到’foo’之前没有’foo’. 我错过了什么?为什么第三个foo匹配? 注意:grep -P意味着将正则表达式解释为perl兼容的正则表达式. grep -o表示只打印匹配的字符串.我的grep是2.5.1版. 解决方法
经过对这个问题的大讨论(已经转移到聊天中),我得出的结论是,我对后观负面断言的理解是正确的:
echo "foo foofoo" | grep -Po '(?<!foo)foo' 应该返回foo两次. 我的grep版本,或者它编译的PCRE库,都是错误的. 有些人在他们的机器上使用不同版本的grep测试了这个命令,并且它们有不同的结果.有些人看过两个foo,有些人有三个foo,就像我一样. 我tested that regex with Perl和我有预期的结果,foo两次. grep man page声明-P选项是实验性的. 我的教训是:如果你想要真正有用的PCRE,请使用Perl. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |