正規表現 "...フーバー..."?

次のような式で引用符付きの FooBar を見つけるためのregexpとは何ですか?

"FooBar"
"Hello, FooBar!"
"Some text, FooBar, some text..."
"garbageFooBarGarbage"

0

3 答え

これは正規表現にとっては難しい問題です。引用符で囲まれた部分が2つ以上ある行がある場合、「FooBar」が引用されているか、引用されている2つの部分の間にどのようなことが分かっていますか?

少し近づく解決策はこれでしょう:

^[^"\r\n]*(?:"[^"\r\n]*"[^"\r\n]*)*[^"\r\n]*("[^"\r\n]*FooBar[^"\r\n]*")

See it here on Regexr

完全な文字列を見て、 ^ は文字列の先頭に一致していて、次に引用符以外のものと一致しています。 (?: "[^" \ r \ n] * "[^" \ r \ n] *)* これは引用符のペアを、そして、あなたが( "[^" \ r \ n] * FooBar [^ "\ r \ n] *")と一致させたい部分を括弧で囲んで、キャプチャグループ。

私は改行文字も無視しています。それをいくつかの場所で一致させたい場合は、その文字クラスから \ r \ n を削除してください。

これは、一重引用符がなく、エスケープされた引用符がないという前提の下にあります。一重引用符で完全に失われ、エスケープされた引用符を無視することは可能ですが、正規表現はより複雑になります。

4
追加された
素晴らしい答えをありがとう!私はちょうど多くのソースコードでいくつかの単語を検索するというコンテキストで私の質問をしました。有効とマークされた回答は私を助け、あなたに同意します。それはまた無効なパターンを見つけるでしょう。
追加された 著者 user663896,

これは、大文字小文字を区別しないようにするには、/FooBar/g または/FooBar/gi で動作するはずです。 (例: http://regexr.com?2vgs2

1
追加された
それらがなければ、私は通常、言語固有の正規表現リテラルを含めることはあまり役に立ちません。質問者がPerl、PHP、またはJavaScriptを知らない場合、これはうまく動作しないことに気付くかもしれません。
追加された 著者 Joey,
引用符はどうですか?一致は引用符で囲まれているはずです。
追加された 著者 Alan Moore,
ガー!申し訳ありませんが、私はすべて興奮し、急いでいます。
追加された 著者 Aaron,
質問に答えない。
追加された 著者 Nikodemus,

ちょうど ^ \ "。* FooBar。* \" $ だけで作業ができます。

1
追加された
これは "Some"テキスト、FooBar、 "more text ..."
追加された 著者 stema,
ありがとう、この式は正常に動作します。
追加された 著者 user663896,