web-dev-qa-db-ja.com

正規表現で一致を反転

PCREでは、文字列がnotが見つかった場合にのみ一致する式をどのように構築できますか。

Grepを使用している場合(そうではありません)、-vオプションが必要です。

より具体的な例:文字列fooが文字列内でnotである場合、正規表現に一致させたい。したがって、barと一致しますが、foobarとは一致しません。

28
Joe Beda

さて、あなたが思いついた解決策に基づいて正規表現を改良しました(「テスト」で始まる文字列と誤って一致します)。

^((?!foo).)*$

この正規表現は、fooを含まない文字列のみに一致します。最初のlookaheadは、 'foo'で始まる文字列を拒否し、2番目のlookaheadは、fooが文字列のどこにも見つからないことを確認します。

51

ダニエルの答えに基づいて、私はうまくいくものがあると思う:

^(.(?!test))*$

キーは、文字列内のすべての文字で否定的なアサーションを作成する必要があるということです

4
Joe Beda

私はすでに誰かのためにこの質問に答えました、これらのリンクを見てください:

2
Sasha Chedygov

実際、ほとんど重複しています。あなたが探している正規表現は

(?!foo)。*

1