1 つの用語を含み、別の用語が欠落しているすべての .java ファイルをすばやく見つけようとしています。私はMyEclipse 10.7とその「検索|検索」を使用しています。正規表現をサポートするファイル検索機能。
このシナリオで正規表現は機能しますか? 正しい正規表現は何でしょうか?
ティア、スティーブ
私が見つけた唯一の解決策は、次の正規表現です。
^(?!.[\s\S]*MISSING_TERM).[\s\S]*INCLUDED_TERM.*$
INCLUDED_TERM
行に関係なく、 を含むが欠落しているすべてのファイルを検索しますMISSING_TERM
。
キーは です\s\S
。これにより、各行ではなくファイル全体が検索されます。
(?m)\A(?=.*REGEX_TO_FIND)(?!.*MISSING_REGEX.*).*\z
正規表現は少しトリッキーになる可能性がありますが、2つの部分に分かれます。
ここに、テキスト内の単語を検索する方法を示す例がありconnectReadOnly
ますが、検索に失敗しますdisconnect
。テキストに含まれconnectReadOnly
ているため、次の部分を探し始めますが、見つかりませんdisconnect
。はテキスト内にあるためdisconnect
、文字列全体で失敗します(ファイル全体が一致するために必要なもの)。2番目の部分である否定部分(?!.*disconnect.*)
をいじってみると、必要な正規表現として設定できます。私の例では、コード内のどこにも検索したくありませんdisconnect
:)検索する単語に簡単に置き換えることができます。さらに、「見つからない」というより複雑な正規表現を使用することもできます。
(?m)
重要なのは、文字列文字の先頭と末尾を使用して設定される複数行モードを使用することです。^
とを使用し$
て行を開始/終了します。ここで、とは文字列\A
を\z
開始および終了します。これにより、ファイル全体に一致が拡張されます。
編集:connectReadOnly
およびdisconnect
質問の使用:(?m)\A(?=.*connectReadOnly)(?!.*disconnect.*).*\z
。更新された例はここにあります。
次のようなものを使用できます。
(?<!.*bar)foo(?!.*bar)
「foo」が見つかったが「bar」が見つからない場合に一致します。
注意: 通常、ドットは改行以外の任意の文字を表すため、複数行の正規表現を使用するように検索エンジンを構成する必要があります (例: Notepad++ には「. 改行に一致する」というオプションがあります) 。