3

我正在尝试使用负面的后向正则表达式,但我似乎无法让它在我的 zshell 中工作。我做错了吗?

回声“内特或内特” | grep "(\?<!N)a"

这应该匹配ain nate不是ain Nate ...对吗?

4

4 回答 4

8

当我想到前瞻或后瞻断言时,我会想到 Perl。您将需要使用 perl-regexp 和单引号来查找ain nate

echo "Nate or nate" | grep -P '(?<!N)a'
于 2012-08-04T00:33:01.227 回答
1

它应该。但是,grep将打印出任何匹配的行。

如果您grep只想打印匹配的行的部分,您应该给它-o选项。

于 2012-08-03T18:40:17.587 回答
0

有许多不同的正则表达式风格,但 grep 的正则表达式应该看起来像这样"(?<!N)a"

于 2012-08-03T18:30:31.970 回答
0

首先,您想使用单引号(zsh 中的双引号会尝试扩展!N),您可能需要扩展正则表达式(grep -E)。此外,根据您的 grep 版本,它可能根本不支持 0 宽度断言,请检查您的man 7 re_format.

于 2012-08-03T18:47:49.070 回答