クイックスタート
チュートリアル
ツールと言語
リファレンス
書籍レビュー
正規表現の例
数値範囲
浮動小数点数
メールアドレス
IPアドレス
有効な日付
数値日付をテキストに変換
クレジットカード番号
完全な行の一致
重複行の削除
プログラミング
近接する2つの単語
落とし穴
カタストロフィックバックトラッキング
過剰な繰り返し
サービス拒否攻撃
すべてをオプションにする
繰り返しキャプチャグループ
Unicodeと8ビットの混在
このサイトの詳細
はじめに
正規表現クイックスタート
正規表現チュートリアル
置換文字列チュートリアル
アプリケーションと言語
正規表現の例
正規表現リファレンス
置換文字列リファレンス
書籍レビュー
印刷可能なPDF
このサイトについて
RSSフィードとブログ
RegexBuddy—The most comprehensive regular expression library!

テキスト行全体の一致

多くの場合、特定の要件を満たす行の一部だけでなく、テキストファイル内の完全な行を一致させたい場合があります。これは、テキストエディタでの検索と置換で entire 行を削除したり、情報検索ツールで entire 行を収集したりする場合に便利です。

この例を単純にするために、「John」という単語を含む行を一致させたいとしましょう。正規表現Johnを使用すると、これらの行を簡単に見つけることができます。ただし、ソフトウェアはJohnのみを一致として示し、単語を含む行全体は示しません。

解決策は非常に簡単です。行全体が必要であることを指定するために、キャレットとドル記号を使用し、埋め込み改行で一致させるオプションを有効にします。EditPad ProPowerGREPなどのテキストファイルの操作を目的としたソフトウェアでは、アンカーは常に埋め込み改行で一致します。元の正規表現の一致の前後の行の部分を一致させるにはJohnドットアスタリスクを使用します。ドットが改行と一致するオプションは必ず*オフ*にしてください。

結果の正規表現は^.*John.*$です。同じ方法を使用して、任意の正規表現の一致を行全体または完全な行のブロックに拡張できます。選択を使用する場合など、場合によっては、括弧を使用して元の正規表現をグループ化する必要があります。

特定の単語を含む行または含まない行の検索

行が一連の要件のいずれかを満たすことができる場合は、正規表現で選択を使用するだけです。^.*\b(one|two|three)\b.*$は、「one」、「two」、または「three」のいずれかの単語を含むテキストの完全な行と一致します。最初の後方参照には、行が実際に含む単語が含まれます。複数の単語が含まれている場合、最後(最も右側)の単語が最初の後方参照にキャプチャされます。これは、アスタリスクが貪欲であるためです。次のように最初のアスタリスクを非貪欲にすると^.*?\b(one|two|three)\b.*$、後方参照には最初(最も左側)の単語が含まれます。

行が複数の要件すべてを満たす必要がある場合は、先読みを使用する必要があります。^(?=.*?\bone\b)(?=.*?\btwo\b)(?=.*?\bthree\b).*$は、「one」、「two」、および「three」の*すべて*の単語を含むテキストの完全な行と一致します。繰り返しますが、アンカーは行の先頭と末尾で一致する必要があり、ドットは改行と一致してはなりません。キャレットと、先読みがゼロ長であるという事実により、3つの先読みすべてが行の各先頭で試行されます。各先読みは、単一行の任意のテキスト(.*?)とそれに続く単語のいずれかと一致します。正規表現全体が一致するためには、3つすべてが正常に一致する必要があります。次のような単語の代わりに\bword\b、先読み内に任意の正規表現を、どれほど複雑であっても配置できます。最後に、.*$は、先読みが要件を満たしていることを確認した後、正規表現が実際にその行と一致するようにします。

条件が行に何かが含まれては*ならない*というものである場合は、否定先読みを使用します。^((?!regexp).)*$は、regexpと*一致しない*完全な行と一致します。以前、肯定先読みを使用したときとは異なり、否定先読みとドットの両方を一緒に繰り返していることに注意してください。肯定先読みの場合、一致できる場所を1つ見つけるだけで済みます。ただし、否定先読みは行内のすべての文字位置でテストする必要があります。regexpがどこかだけでなく、どこでも失敗することをテストする必要があります。

最後に、複数の肯定的および否定的な要件を次のように組み合わせることができます^(?=.*?\bmust-have\b)(?=.*?\bmandatory\b)((?!avoid|illegal).)*$。複数の肯定的な要件を確認する場合、ゼロ長の表明でいっぱいの正規表現の終わりの.*は、実際に何かと一致したことを確認しました。否定的な要件は行全体と一致する必要があるため、.*を否定テストに置き換えるのは簡単です。