正規表現 後方参照が理解できない
解決したいこと
正規表現の後方参照に関するプログラムで、
なぜこうなるのかが理解できない。
発生している問題・エラー
これはプログラミング第3版p115にあったコードを修正してマッチしたものがわかるように出力させたものです。
<?php
preg_match("/([[:alpha:]]+)\s+\\1/","Paris in the the spring",$m);
print "<br>";
echo '$m[0]='. $m[0];
print "<br>";
echo '$m[1]='. $m[1];
?>
出力は
\$m[0]=the the
\$m[1]=the
となるのですが、
上記の正規表現の意味は、
([[:alpha:]]+)が、どの大文字小文字を含むアルファベットでもよいからそれが1文字以上、
\s+が、スペースが1文字以上、
となるので、スペースも含むと、第1にマッチするのは Paris のはずです。
\1が、バックスラッシュはエスケープで、\1、つまり後方参照となるのですが、
この場合、考えると、次にマッチするのはtheじゃなくて、in じゃないのか?と思うので、
なぜこうなるのかがわかりません。
自分で試したこと
ひとまず、\1をけして、\s+までにしてみて出力してみました。
<?php
//preg_match("/([[:alpha:]]+)\s+\\1/","Paris in the the spring",$m);
preg_match("/([[:alpha:]]+)\s+/","Paris in the the spring",$m);
print "<br>";
echo '$m[0]='. $m[0];
print "<br>";
echo '$m[1]='. $m[1];
?>
出力
\$m[0]=Paris
\$m[1]=Paris
これもこれで、$m[1]は inになるんじゃないのか?と思っているので
ますますわからなくなっています。。。
大変申し訳ありませんが、皆様の力をお貸しいただけると幸いです。