正規表現演算子の優先順位

正規表現は左から右へ評価され、優先順位に従います。これは算術式とよく似ています。

同じ優先順位のものは左から右へ評価され、異なる優先順位のものは高いものから低いものの順に評価されます。以下の表は、さまざまな正規表現演算子の優先順位を高いものから低いものの順に示しています。

演算子 説明
\ エスケープ文字
(), (?:), (?=), [] 丸括弧と角括弧
*, +, ?, {n}, {n,}, {n,m} 量指定子
^, $, \任意のメタ文字、任意の文字 アンカーとシーケンス(つまり、位置と順序)
| 置換、「または」操作
文字は置換演算子よりも優先順位が高いため、"m|food" は "m" または "food" にマッチします。"mood" または "food" にマッチさせるには、括弧を使用して部分式を作成し、"(m|f)ood" とします。

以下は、一般的な正規表現演算子を優先順位の高い順に並べたものです:

  • エスケープ記号: \他の特殊文字をエスケープするために使用されるエスケープ記号です。これは最も高い優先順位を持ちます。

    例:\d、\.など。ここで、\dは数字にマッチし、\.はドット(ピリオド)にマッチします。

  • 括弧:丸括弧()部分式を作成するために使用され、他の演算子よりも高い優先順位を持ちます。

    例:(abc)+"abc" に1回以上マッチします。

  • 量指定子:量指定子は、前の要素が繰り返される回数を指定します。

    例:a*"a" に0回以上マッチします。

  • 文字クラス:文字クラスは角括弧を使用して[]表され、括弧内の任意の文字にマッチするために使用されます。

    例:[aeiou]任意の母音文字のいずれかにマッチします。

  • アサーション:アサーションは、文字列内の特定の位置の条件をチェックするための要素です。

    例:^は行の先頭を表し、$は行の末尾を表します。

  • 連結:連結は、他の演算子がない場合に、文字間の単純な連結を表します。

    例:abc"abc" にマッチします。

  • パイプ:パイプ記号|「または」の関係を表し、複数のパターンから1つを選択するために使用されます。

    例:cat|dog"cat" または "dog" にマッチします。

次に、以下の正規表現の優先順位の説明を見てみましょう:

\d{2,3}|[a-z]+(abc)*
  • \d{2,3}2〜3個の数字にマッチします。
  • |は「または」を表します。
  • [a-z]+1つ以上の小文字アルファベットにマッチします。
  • (abc)*"abc" に0回以上マッチします。
その他の拡張