我正在尝试使用负面的后向正则表达式,但我似乎无法让它在我的 zshell 中工作。我做错了吗?
回声“内特或内特” | grep "(\?<!N)a"
这应该匹配a
in nate但不是a
in Nate ...对吗?
当我想到前瞻或后瞻断言时,我会想到 Perl。您将需要使用 perl-regexp 和单引号来查找a
in nate
:
echo "Nate or nate" | grep -P '(?<!N)a'
它应该。但是,grep
将打印出任何匹配的行。
如果您grep
只想打印匹配的行的部分,您应该给它-o
选项。
有许多不同的正则表达式风格,但 grep 的正则表达式应该看起来像这样"(?<!N)a"
:
首先,您想使用单引号(zsh 中的双引号会尝试扩展!N
),您可能需要扩展正则表达式(grep -E
)。此外,根据您的 grep 版本,它可能根本不支持 0 宽度断言,请检查您的man 7 re_format
.