web-dev-qa-db-ja.com

Java regexを介して単語のセットを否定する

Java正規表現を使用して単語のセットを否定したいと思います。

たとえば、cvssvnnvsmvcを無効にします。私は^[(svn|cvs|nvs|mvc)]という正規表現を書きました。

どうやらそれはうまくいかないようです。

19
Abhishek

これを試して:

^(?!.*(svn|cvs|nvs|mvc)).*$

svn、cvs、nvs、mvcのいずれかが含まれていない場合、これはテキストと一致します。

これは同様の質問です: C#正規表現は特定の文字列を含まない文字列と一致しますか?

44
Kamarey

それはそれほど単純ではありません。 Wordを否定する場合は、Wordを文字に分割し、各文字を否定する必要があります。

だから否定する

/svn/

あなたは書く必要があります

/[^s][^v][^n]/

だからあなたがフィルタリングしたいものは本当に醜い正規表現に変わります、そして私はこの正規表現を使う方が良いと思います

/svn|cvs|nvs|mvc/

文字列をテストするときは、結果を否定するだけです。

JSでは、これはそのようには見えません:

!/svn|cvs|nvs|mvc/.test("this is your test string");
3
RaYell

あなたの正規表現は間違っています。大括弧の間に、必須または無視する文字を入れることができます。 ^(svn|cvs|nvs|mvc)$が見つからない場合は、問題ありません。

2
pvoosten