我的 login.txt 文件包含以下条目
abc def
abc 123
def abc
abc de
tha ewe
当我使用 perl 进行正向前瞻时,我得到以下结果
cat login.txt | perl -ne 'print if /(?)abc\s(?=def)/'
abc def
当我使用 grep 时,我得到以下结果
cat login.txt | grep -P '(?<=abc)\s(?=def)'
abc def
来自 perl 和 grep 的负面 lookahed 结果如下。
cat login | perl -ne 'print if /(?)abc\s(?!def)/'
abc 123
def abc
abc de
搜索结果
cat login.txt | grep -P '(?<=abc)\s(?!def)'
abc 123
abc de
perl 匹配 def abc 以进行否定前瞻。但它不应该匹配 def abc,因为我正在检查 abc 然后 def 模式。 grep 返回正确的结果。
我的 perl 模式中缺少什么吗?
最佳答案
grep 不在它根据正则表达式检查的字符串中包含换行符,因此 abc\s
在 abc 位于行尾时不匹配。在 perl 中使用 chomp 或使用 -l 命令行选项,您将看到类似的结果。
我不确定您为什么要在 perl 和 grep 正则表达式之间进行其他更改; (?)
应该完成什么?
关于regex - 使用 grep 和 perl 的正/负前瞻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20656914/