11

1 つの用語を含み、別の用語が欠落しているすべての .java ファイルをすばやく見つけようとしています。私はMyEclipse 10.7とその「検索|検索」を使用しています。正規表現をサポートするファイル検索機能。

このシナリオで正規表現は機能しますか? 正しい正規表現は何でしょうか?

ティア、スティーブ

4

4 に答える 4

16

私が見つけた唯一の解決策は、次の正規表現です。

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

INCLUDED_TERM行に関係なく、 を含むが欠落しているすべてのファイルを検索しますMISSING_TERM

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

于 2013-03-13T15:44:58.290 に答える
0

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

正規表現は少しトリッキーになる可能性がありますが、2つの部分に分かれます。

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

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

(?m)重要なのは、文字列文字の先頭と末尾を使用して設定される複数行モードを使用することです。^とを使用し$て行を開始/終了します。ここで、とは文字列\A\z開始および終了します。これにより、ファイル全体に一致が拡張されます。

編集:connectReadOnlyおよびdisconnect質問の使用:(?m)\A(?=.*connectReadOnly)(?!.*disconnect.*).*\z。更新された例はここにあります。

于 2013-03-04T20:06:55.297 に答える
0

次のようなものを使用できます。

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

「foo」が見つかったが「bar」が見つからない場合に一致します。

注意: 通常、ドットは改行以外の任意の文字を表すため、複数行の正規表現を使用するように検索エンジンを構成する必要があります (例: Notepad++ には「. 改行に一致する」というオプションがあります) 。

于 2013-03-04T20:14:43.030 に答える