2009-06-05 26 views
23

PCREを使用すると、文字列がではなく、が見つからない場合にのみ一致する式を作成するにはどうすればよいですか。regexpとの反転一致

私がgrepを使っていたのなら、私は-vオプションが必要です。

もっと具体的な例:文字列内にがではない場合、正規表現が一致するようにしたい場合は、文字列にと入力します。したがって、barと一致するでしょうが、foobarは一致しません。

+0

どのような言語を使用していますか? – innaM

+0

これは、PCREをアドバタイズするWebサービスに入力されます。したがって、言語はPCREです。 –

+1

重複:http://stackoverflow.com/questions/850907/regular-expression-opposite –

答えて

41

さて、私はあなたが思いついた解決法(誤って 'test'で始まる文字列と一致する)に基づいて正規表現を洗練しました。

^((?!foo).)*$ 

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

1

実際にはほぼ同じです。 。キーがある

^(.(?!test))*$ 

:私はあなたが探している正規表現は

(?!fooという)であると思います*

3

ダニエルの回答に基づいて、私は私が働く何かを持っていると思いますあなたは、文字列

+0

これはどちらでも動作するとは思わない。 'test'という文字列と一致します。 –

+0

シュート - あなたは正しいです。これは、私の現在のシナリオでは、そのエッジケースがヒットしないので十分ですが、問題を完全に解決するわけではありません。 –

+0

元の回答を削除し、問題を完全に解決する新しいケースを投稿しました。基本的に私のオリジナルの答えはあなたの部分文字列で始まる文字列を拒否し、部分文字列を含む文字列は拒否されていますが、それで始まらない文字列は拒否されました。それらをまとめることが解決策です。 :) –

-1

ビルド一致し、かつ使用式の中ですべての文字にマイナスの主張をする必要があることを!おそらくgrepのがとにかくない方法ですマッチ()...(論理否定)を ...

+0

私は一致を直接評価するコードを制御できませんので、残念ながらこれはオプションではありません。 –

関連する問題