3

否定的な後読み正規表現をいじってみましたが、zshell で動作させることができないようです。私はこれを間違っていますか?

echo "ネイトかネイト" | grep "(\?<!N)a"

これはain nateと一致するはずですが、in Nateとは一致しません...そうですか?a

4

4 に答える 4

8

先読みまたは後読みアサーションについて考えるとき、私は Perl を思い浮かべます。ainを見つけるには、perl-regexp と単一引用符を使用する必要があります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

まず、単一引用符を使用したい場合 (zsh の二重引用符は を展開しようとし!Nます)、おそらく拡張正規表現 ( grep -E) が必要です。また、grep のバージョンによっては、幅 0 のアサーションがまったくサポートされない場合がありますman 7 re_format。.

于 2012-08-03T18:47:49.070 に答える
0

正規表現にはさまざまな種類がありますが、grep の正規表現はおそらく次のようになります"(?<!N)a"

于 2012-08-03T18:30:31.970 に答える