PCRE 正規表現構文
PHP Manual

後方参照

文字クラス外で、バックスラッシュに続いて 1 以上の数値(複数桁可) を記述したものは、パターン中のより前方(すなわち左)にある キャプチャ用サブパターンに対する後方参照 (back reference) です。ただし、 その左方に、その数値以上の個数のキャプチャ用サブパターンの開きカッコが ある必要があります。

なお、バックスラッシュの後に 10 未満の 10 進数が続く場合は、 常に後方参照として解釈され、パターン全体で指定した個数以上の キャプチャ用サブパターンが無いとエラーが発生します。言いかえると、 参照されるカッコは、10未満の番号に対しては、参照する側の左にある必要が ないということです。バックスラッシュの後に数字が続く場合の処理の詳細に ついては、前述の 「バックスラッシュ」のセクションを参照してください。

後方参照は、カレントの対象文字列においてキャプチャ用サブパターンが 実際にマッチした文字列にマッチします。サブパターンがパターンとして マッチし得るものではありません。すなわち、パターン

      (sens|respons)e and \1ibility
      
は、"sense and sensibility" および "response and responsibility" にマッチしますが、 "sense and responsibility" にはマッチしません。また、 後方参照が記述されている位置で大小文字を区別するマッチングが有効ならば、 文字の大小文字の別も関係します。例えば、
      ((?i)rah)\s+\1
      
は、"rah rah" および "RAH RAH" にマッチしますが、 元のキャプチャ用サブパターンは大小文字を区別しないマッチングを 行っているにもかかわらず、"RAH rah" にはマッチしません

同じサブパターンに対して、複数回の後方参照を行うことができます。 また、使われなかったサブパターンに対する後方参照を行おうとすると、 マッチが失敗します。例えば、パターン

      (a|(bc))\2
      
は、はじめに "bc" でなく "a" にマッチした場合は、マッチが失敗します。 最大 99 番までの後方参照を使用できるため、バックスラッシュの後に 数字が続くものはすべて後方参照番号の可能性があるものとして解釈されます。 後に数字が続く場合、後方参照を終了するためになんらかの区切り文字を 置く必要があります。PCRE_EXTENDED オプションを設定している場合は空白文字を区切り文字として使えます。 その他の場合は空のコメントを使います。

後方参照を、それ自身が参照するサブパターンのカッコ内に記述した場合、 そのサブパターンが最初に使われた際にマッチが失敗します。ですので、 (a\1) は、何にもマッチしません。しかし、このような参照は、 複数回繰り返されるサブパターンの内部では有用です。例えば、パターン

      (a|b\1)+
      
は、"a" が連続するものや "aba", "ababba" 等にマッチします。 サブパターンが繰り返される場合、後方参照は、直前の繰り返しで一致した 文字列にマッチします。こうしたパターンを動作させるためには、 繰り返しの1 回目に、後方参照を含むパターンとのマッチングが 行われないことが必要です。これには、上の例のように選択肢を使うか、 下限が 0 回の量指定子を使います。

名前を指定したサブパターンへの後方参照を行うには (?P=name) とします。PHP 5.2.4 以降では、これ以外に \k<name>\k'name'\k{name} あるいは \g{name} などとすることも可能です。


PCRE 正規表現構文
PHP Manual