何かが先行していない場合に何かを照合するための正規表現


163

したがって、Javaの正規表現を使用して、パターンの前に特定の文字がない場合にのみ一致する正規表現を作成します。例えば:

String s = "foobar barbar beachbar crowbar bar ";

barの前にfooがない場合に一致させたい。したがって、出力は次のようになります。

barbar
beachbar
crowbar
bar

これはおそらく非常に単純な質問です。私は正規表現を学ぼうとしていますが、その間に私は今仕事をするために何かが必要です。

回答:


276

あなたはnegative lookbehindこのように使いたいです:

\w*(?<!foo)bar

ここ(?<!x)で、「この時点の前に "x"がない場合のみ」を意味します。

詳細については、正規表現-回避策を参照してください。

編集:を追加し\w*て、以前の文字をキャプチャします(例:「ビーチ」)。


2
foo_arbitrary_barと一致しないようにするには、どのような変更が必要ですか?つまり、fooが直前のバーではない
Brad Kent

1
@BradKent (?<!foo).*barはそのようなものと一致すると思います。
エミラー2018

@emyllerいいえ。これはfoobazbarと一致します(fooはfoobazbarの前に来ないため、一致します)
Brad Kent

2
@BradKent「not match」で「not」を読み取らなかったため、一致すると述べた。そのときあなたの事件は\b(?!foo)\w*bar\b私には似ている。
エミラー2018

4
@BradKent次に、新しい質問をしたり、達成しようとしていることを詳細に説明したり、自分で見つけるまで正規表現で遊んだりすることができます。:)
エミラー2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.