例 |
正規表現の例 |
数値範囲 |
浮動小数点数 |
メールアドレス |
IPアドレス |
有効な日付 |
数値日付をテキストに変換 |
クレジットカード番号 |
完全な行の一致 |
重複行の削除 |
プログラミング |
近接する2つの単語 |
落とし穴 |
カタストロフィックバックトラッキング |
過剰な繰り返し |
サービス拒否攻撃 |
すべてをオプションにする |
繰り返しキャプチャグループ |
Unicodeと8ビットの混在 |
このサイトの詳細 |
はじめに |
正規表現クイックスタート |
正規表現チュートリアル |
置換文字列チュートリアル |
アプリケーションと言語 |
正規表現の例 |
正規表現リファレンス |
置換文字列リファレンス |
書籍レビュー |
印刷可能なPDF |
このサイトについて |
RSSフィードとブログ |
多くの場合、特定の要件を満たす行の一部だけでなく、テキストファイル内の完全な行を一致させたい場合があります。これは、テキストエディタでの検索と置換で entire 行を削除したり、情報検索ツールで entire 行を収集したりする場合に便利です。
この例を単純にするために、「John」という単語を含む行を一致させたいとしましょう。正規表現Johnを使用すると、これらの行を簡単に見つけることができます。ただし、ソフトウェアはJohnのみを一致として示し、単語を含む行全体は示しません。
解決策は非常に簡単です。行全体が必要であることを指定するために、キャレットとドル記号を使用し、埋め込み改行で一致させるオプションを有効にします。EditPad ProやPowerGREPなどのテキストファイルの操作を目的としたソフトウェアでは、アンカーは常に埋め込み改行で一致します。元の正規表現の一致の前後の行の部分を一致させるには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).)*$。複数の肯定的な要件を確認する場合、ゼロ長の表明でいっぱいの正規表現の終わりの.*は、実際に何かと一致したことを確認しました。否定的な要件は行全体と一致する必要があるため、.*を否定テストに置き換えるのは簡単です。
| クイックスタート | チュートリアル | ツールと言語 | 例 | リファレンス | 書籍レビュー |
| 正規表現の例 | 数値範囲 | 浮動小数点数 | メールアドレス | IPアドレス | 有効な日付 | 数値日付をテキストに変換 | クレジットカード番号 | 完全な行の一致 | 重複行の削除 | プログラミング | 近接する2つの単語 |
| カタストロフィックバックトラッキング | 過剰な繰り返し | サービス拒否攻撃 | すべてをオプションにする | 繰り返しキャプチャグループ | Unicodeと8ビットの混在 |
ページURL:https://regular-expressions.dokyumento.jp/completelines.html
ページ最終更新日:2019年11月22日
サイト最終更新日:2024年3月15日
著作権©2003-2024 Jan Goyvaerts. All rights reserved.