regex - 使用 grep 和 perl 的正/负前瞻

标签 regex bash perl grep negative-lookahead

我的 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/

相关文章:

java - 从 xml 字符串中删除非法标记(以数字开头的节点)

正则表达式排除特定字符不起作用

bash - |&(竖线、符号)在 bash 中是什么意思?

node.js - 如何从 "sh"shell(在 Nodejs 上)激活 Conda 环境?

mysql - 如何将来自三个 Perl 数组的数据插入到单个 MySQL 表中?

regex - 如何在 R 中分配变量?

javascript - javascript中的正则表达式从url中删除数字路径

bash - MV 命令行不适用于某些文件 (OSX)

perl - 在 Moose::Role 中访问 MooseX::ClassAttribute

arrays - Perl:将数组分配给散列