否定的な後読み正規表現をいじってみましたが、zshell で動作させることができないようです。私はこれを間違っていますか?
echo "ネイトかネイト" | grep "(\?<!N)a"
これはain nateと一致するはずですが、in Nateとは一致しません...そうですか?a
先読みまたは後読みアサーションについて考えるとき、私は Perl を思い浮かべます。ainを見つけるには、perl-regexp と単一引用符を使用する必要がありますnate。
echo "Nate or nate" | grep -P '(?<!N)a'
そうすべき。ただし、grep一致する行はすべて出力されます。
grep一致する行の部分だけを印刷したい場合は、-oオプションを指定する必要があります。
まず、単一引用符を使用したい場合 (zsh の二重引用符は を展開しようとし!Nます)、おそらく拡張正規表現 ( grep -E) が必要です。また、grep のバージョンによっては、幅 0 のアサーションがまったくサポートされない場合がありますman 7 re_format。.
正規表現にはさまざまな種類がありますが、grep の正規表現はおそらく次のようになります"(?<!N)a"。