ホームページ >バックエンド開発 >PHPチュートリアル >php-PCRE 正規表現逆参照の詳細な紹介
文字クラスの外で、バックスラッシュの後に0より大きい数字(場合によっては数字)が続くものは、パターン内に以前に出現したキャプチャグループへの後方参照です。
バックスラッシュの直後の数字が 10 未満の場合、それは常に後方参照であり、パターン内にキャプチャ グループがそれほど多くない場合はエラーが発生します。 言い換えれば、引用された括弧の数は、10 未満の引用された括弧の数よりも少なくすることはできません。 数値がどのように処理されるかについては、上記の「バックスラッシュ」セクションを参照してください。 後方参照は、サブグループ パターンの内容と一致するのではなく、ターゲットstring 内の参照されたキャプチャ グループによって実際にキャプチャされたコンテンツと直接一致します。したがって、パターン (sens|respons)e と 1ibility は、「センスと感性」および「応答と責任」には一致しますが、「センスと責任」には一致しません。 逆参照時に大文字と小文字を区別した一致が強制される場合、たとえば、((?i)rah)s+1 は「rah rah」および「RAH RAH」に一致しますが、元のキャプチャ サブ グループであっても「RAH rah」には一致しません。それ自体は大文字と小文字を区別しません。 注釈: ここで考慮する必要があるのは、後方参照によって期待されるコンテンツは、参照されたキャプチャ サブグループによって取得されるコンテンツとまったく同じであるということです (もちろん、後方参照の前に内部オプションを設定することで区別できないようにすることができます)。大文字と小文字を変更するか、パターン修飾子を追加することによっても実現できます。ただし、このアプローチは実際にその動作を外部から制御します。) 同じサブグループへの後方参照が複数存在する場合があります。 サブグループは実際には特定の一致に使用されない場合があり、その場合、サブグループへの後方参照は失敗します。 たとえば、パターン (a|(bc))2 は、「a」で始まるが「bc」ではない文字列と一致する場合、常に失敗します。 後方参照は最大 99 個存在する可能性があるため、バックスラッシュの直後にある任意の数値が後方参照の数になる可能性があります。 パターンの後に後方参照の直後に数字が続く場合は、後方参照構文を終了するために何らかの区切り文字を使用する必要があります。 PCRE_EXTENDED オプションが設定されている場合は、スペースを使用してこれを行うことができます。他の場合には、空の コメント を使用できます。
後方参照が参照するサブグループ内にある場合、そのマッチングは失敗します。たとえば、(a1) は一致しません。ただし、この参照は内部サブパターンの繰り返しに使用できます。たとえば、パターン (a|b1)+ は、「a」のほか、「aba」、「ababba」などで構成される任意の数の文字列と一致します。 (注釈: サブグループ内にはオプションのパスがあるため、オプションのパス パスはマッチングを完了することができ、マッチングが完了した後、後方参照によってコンテンツを参照できます。サブパターンの各反復中に、後方参照は、前の反復中にサブグループが一致した文字列と一致します。この作業を行うには、パターンは、最初の反復で後方参照が一致する必要がないことを保証できなければならないという条件を満たしている必要があります。 この条件は、上記の例のようにオプションのパスを使用するか、最小値 0 の PHP 5.2.2 以降、 g エスケープ シーケンスは、サブパターンへの絶対参照と相対参照の両方に使用できます。 このエスケープ シーケンスの後には、符号なしの数値または負の数値を続ける必要があります。必要に応じて括弧で囲んでください。 シーケンス 1、g1、および g{1} の間には同義関係があります。 この使用法により、後方参照を記述するためにバックスラッシュの後に数値を使用することによって生じる曖昧さが解消されます。 このエスケープ シーケンスは、後方参照と 8 進数の数字文字を区別するのに役立ち、また、後方参照の後に g{2}1 などのソース一致数字が続くことを明確にします。 後方参照では、(?P=name) などのサブグループ名を使用した構文記述もサポートされており、PHP 5.2.2 以降では、k