否定的な後読み正規表現をいじってみましたが、zshell で動作させることができないようです。私はこれを間違っていますか?
echo "ネイトかネイト" | grep "(\?<!N)a"
これはa
in nateと一致するはずですが、in Nateとは一致しません...そうですか?a
先読みまたは後読みアサーションについて考えるとき、私は Perl を思い浮かべます。a
inを見つけるには、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"
。