正規表現 - 例


単純な式

正規表現の最も単純な形式は、検索文字列内でそれ自体と一致する 1 つの通常の文字です。たとえば、A のような 1 文字のパターンは、検索文字列のどこに出現しても、常に文字 A と一致します。単一文字の正規表現パターンの例をいくつか示します。

/a/
/7/
/M/

多くの単一文字を組み合わせて大きな式を形成できます。たとえば、次の正規表現は、a、7、M という単一文字の表現を組み合わせています。

/a7M/

連結演算子がないことに注意してください。文字を 1 文字ずつ入力するだけです。

文字一致

ピリオド (.) は、1 つの例外を除き、文字列内のすべての印刷文字または非印刷文字と一致します。例外は改行文字 (n) です。次の正規表現は、a1c、a2c、a-c、a#c だけでなく、aac、abc、acc、adc などにも一致します:

/a.c/

ファイル名を含む文字列に一致するには、ピリオド (.) が入力文字列になります。コンポーネントの場合は、正規表現のピリオドの前にバックスラッシュ () 文字を追加してください。説明すると、次の正規表現は filename.ext と一致します:

/filename\.ext/

これらの式では、「任意の」 1 文字のみと一致します。リスト内の特定の文字グループを照合する必要がある場合があります。たとえば、数字の章タイトル (第 1 章、第 2 章など) を見つけたい場合があります。

括弧式

一致する文字グループのリストを作成するには、1 つ以上の単一文字を角括弧 ([ と ]) の中に配置します。文字を括弧で囲んだ場合のリストを「括弧式」と呼びます。通常の文字は、他の文字と同様に角括弧内でそれ自体を表します。つまり、入力テキスト内でそれ自体と 1 回一致します。ほとんどの特殊文字は、角括弧式の中に出現すると意味を失います。次のようないくつかの例外があります。

  • ] 文字が最初の項目ではない場合、リストは終了します。リスト内の ] 文字と一致させるには、それを最初の [ の直後に配置します。

  • キャラクターは引き続きエスケープ キャラクターとして機能します。文字を一致させるには、\ を使用します。

角括弧式で囲まれた文字は、正規表現内のその位置にある単一の文字とのみ一致します。次の正規表現は、Chapter 1、Chapter 2、Chapter 3、Chapter 4、および Chapter 5 に一致します。

/Chapter [12345]/

「Chapter」という単語とそれに続くスペースの位置は、角括弧内の文字を基準にして固定されていることに注意してください。括弧式は、Chapter という単語とスペースの直後の 1 文字の位置のみに一致する文字セットを指定します。これは 9 番目の文字位置です。

文字自体の代わりに範囲を使用して、一致する文字のグループを表すには、ハイフン (-) を使用して範囲内の開始文字と終了文字を区切ります。単一文字の文字値によって、範囲内の相対的な順序が決まります。次の正規表現には、上に示した括弧で囲まれたリストと同等の範囲式が含まれています。

/Chapter [1-5]/

このように範囲を指定すると、開始値と終了値の両方が範囲に含まれます。 Unicode の並べ替え順序では、開始値が終了値より前に来る必要があることにも注意することが重要です。

括弧式にハイフンを含めるには、次のいずれかの方法を使用します:

  • バックスラッシュでエスケープします:

    [\-]
  • ハイフンを括弧リストの先頭または末尾に置きます。次の式は、すべての小文字とハイフンに一致します。

    [-a-z]
    [a-z-]
  • 開始文字の値がハイフンより小さく、終了文字の値がハイフン以上である範囲を作成します。次の 2 つの正規表現は、この要件を満たします:

    [!--]
    [!-~]

リストまたは範囲にないすべての文字を検索するには、リストの先頭にキャレット (^) を置きます。キャレットがリスト内の他の場所にある場合は、それ自体と一致します。次の正規表現は、1、2、3、4、または 5 以外の任意の数字および文字と一致します:

/Chapter [^12345]/

上の例では、式は 9 番目の位置の 1、2、3、4、または 5 の間の任意の数字と一致します。 任意の数字および . 以外の文字。したがって、たとえば、第 7 章は一致し、第 9 章も一致します。

上記の式はハイフン (-) を使用して表すことができます:

/Chapter [^1-5]/

括弧式の一般的な使用法は、大文字、小文字、または任意の数字の一致を指定することです。次の式は、そのような一致を指定します:

/[A-Za-z0-9]/

置換とグループ化

置換では、 | 文字を使用して、2 つ以上の置換オプションから選択できるようにします。たとえば、章タイトルの正規表現を拡張して、章タイトルよりも広範囲の一致を返すことができます。ただし、思っているほど単純ではありません。置換は、 | 文字の両側の最大の式と一致します。

次の式は、行の先頭と末尾に 1 つまたは 2 つの数字が続く章またはセクションに一致すると考えるかもしれません:

/^Chapter|Section [1-9][0-9]{0,1}$/

残念ながら、上記の正規表現は、行の先頭にある Chapter という単語と一致します。行の末尾にある単語 Section とそれに続く任意の数字に一致します。入力文字列が Chapter 22 の場合、上記の式は単語 Chapter にのみ一致します。入力文字列がセクション 22 の場合、この式はセクション 22 と一致します。

正規表現をより制御しやすくするには、括弧を使用して置換の範囲を制限します。つまり、Chapter と Section の 2 つの単語にのみ適用されるようにします。ただし、後方参照のセクションで説明したように、括弧は部分式を作成し、後で使用するためにそれらをキャプチャするためにも使用されます。上記の正規表現の適切な場所に括弧を追加することで、正規表現を第 1 章またはセクション 3 と一致させることができます。

次の正規表現は、式が正しく機能するようにかっこを使用して Chapter と Section を結合します:

/^(Chapter|Section) [1-9][0-9]{0,1}$/

これらの式は正しく機能しますが、Chapter|Section を囲むかっこは、後で使用するために 2 つの一致する単語のいずれかをキャプチャします。上記の式には括弧が 1 セットしかないため、キャプチャされる「部分一致」は 1 つだけです。

上記の例では、括弧を使用して「章」と「セクション」という単語を組み合わせるだけです。将来の使用のために一致が保存されないようにするには、括弧で囲まれた正規表現パターンの前に ?: を置きます。次の変更は、サブマッチを保存せずに同じ機能を提供します:

/^(?:Chapter|Section) [1-9][0-9]{0,1}$/

?: メタキャラクターに加えて、他の 2 つの非キャプチャ メタキャラクターにより、「先読み」一致と呼ばれるものが作成されます。前方参照は ?= を使用して指定され、括弧内の一致する正規表現パターンの開始点で検索文字列と一致します。後方参照は ?! を使用して指定され、正規表現パターンに一致しない文字列の先頭にある検索文字列と一致します。

たとえば、Windows 3.1、Windows 95、Windows 98、および Windows NT への参照が含まれるドキュメントがあるとします。さらに、ドキュメントを更新して、Windows 95、Windows 98、および Windows NT へのすべての参照を Windows 2000 に変更する必要があるとします。次の正規表現 (先読みの例) は、Windows 95、Windows 98、および Windows NT に一致します。

/Windows(?=95 |98 |NT )/

一致が見つかった後、一致したテキスト内の文字 (先読みを除く) は ) であり、次を検索します。次の試合。たとえば、上記の式が Windows 98 に一致する場合、検索は 98 以降ではなく Windows 以降も続行されます。

その他の例

以下に正規表現の例をいくつか示します:

正規表現説明
/b([a-z]+) 1b/gi単語が連続して出現する位置。
/(w+)://([^/:]+)(:d*)?([^# ]*)/ URL をプロトコル、ドメイン、ポート、および相対パスに解決します。
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/ 章の位置を見つけます。
/[-a-z]/A から z、合計 26 文字と - 記号。
/terb/ はチャプタに一致しますが、ターミナルには一致しません。
/Bapt/は章に一致しますが、適性には一致しません。
/Windows(?=95 |98 |NT )/ は Windows95、Windows98、または WindowsNT と一致します。一致するものが見つかると、次の検索一致は Windows の後ろから開始されます。
/^s*$/は空の行と一致します。
/d{2}-d{5}/2桁、ハイフン、5桁のID番号を確認してください。
/<s*(S+)(s[^>]*)?>[sS]*<s*/1s*>/ は HTML タグと一致します。