2013-03-04 12 views

答えて

12

唯一の解決策は、以下の正規表現です。

キーは\s\Sです。キーは各行ではなく、ファイル全体が確実に検索されます。

+0

は魅力的です。 –

0

(?m)\A(?=.*REGEX_TO_FIND)(?!.*MISSING_REGEX.*).*\z

正規表現はちょっとトリッキー得ることができますが、それは二つに分解します。

  1. 一致する語句/語句を検索します。これは正規表現が通常探しているものなので、この部分はそれほどトリッキーではありません。
  2. 存在しない用語を見つける。これは難しい部分ですが、可能です。

私は、テキスト内の単語connectReadOnlyを見つけ、disconnectを見つけるために失敗する方法を示す例HEREを持っています。テキストにはconnectReadOnlyが含まれているため、次の部分の検索が開始され、disconnectが見つかりません。 disconnectがテキスト内にあるので、文字列全体()に失敗し、ファイル全体がと一致する必要があります。 2番目の部分である否定部分(?!.*disconnect.*)で遊んでいれば、必要な正規表現を設定することができます。私の例では、私のコードのどこにでもdisconnectを見つけることは望んでいません:)あなたは簡単にそれを検索するためにあなたの言葉で置き換えることができます。

キーはマルチラインモードを使用します。これは、最初に(?m)を使用して設定し、次に文字列の開始/終了を使用します。 ^$を使用して行を開始/終了します。ここで、\A\zは文字列を開始および終了し、ファイル全体に一致を拡張します。

編集:connectReadOnlydisconnect質問の利用:(?m)\A(?=.*connectReadOnly)(?!.*disconnect.*).*\z。更新された例はhereです。

+0

これは近いようですが、多くの誤認(たとえば、両方の用語を含むファイル)が返されます。 * (?m)^(?= connectReadOnly)((?disconnect))* $ 私の目標は、 connectReadOnly 'はどの行にもありますが、「切断」という用語がありません。 – Fred

+0

@SAL答えに変更が加えられました。試してみてください...それは今すぐ動作するはずです:) – Walls

+0

それはどちらも動作しません。おそらく、Eclipseの正規表現パーサーがあなたが使っているものと違うのだろうか? 様々な情報源からのヒントをまとめた後、私が見つけたのは次のようなものです:^(?![\ s \ S] * disconnect)[\ s \ S] * connect。* $ – Fred

0

あなたが好きなものを使用することができます

(?<!.*bar)foo(?!.*bar) 

「fooが」発見された場合に一致しますが「バー」はないだろう。

注意:ドットが通常の改行を除いて改行を除くため、複数の正規表現(EX:Notepad ++には "。matches newline"というオプションがあります)を使用するように検索エンジンを設定する必要があります。それは関係なく、ラインの、INCLUDED_TERMを含むがMISSING_TERMを欠いたすべてのファイルを見つけ

^(?!.[\s\S]*MISSING_TERM).[\s\S]*INCLUDED_TERM.*$ 

:私は仕事に見つけることができる

1

あなたは、単一の行でそれを検索する場合は、このようにそれを使用する:あなたはclass\.variableのようにそれを必要とするかもしれない原因

^(?!.*MISSING_TERM).*INCLUDED_TERM.*$ 

また、エスケープ文字として\を使用することができます。

+0

実際、私はこれを別の質問で尋ねましたが、私は落雷のように下降しました。だから私はあなたの質問でこれに答えました。私はこの情報がstackoverflow上に維持する必要がありますと信じています。それ以外に、私はひどく傷ついています。 – leventunver

+1

非常に良い答え(y)。ビバライブブロダ。 –

関連する問題