2009-05-20 (水)
*PHPの正規表現
preg_matchとかが完全にPerl互換だと思っていて嵌りました.どうも\Q~\E間の文字列の扱いが中途半端.
if (preg_match("/\\Qaaa\\/bbb.ccc\\E/","aaa/bbb.ccc")) print "match!\n";
なぜか,これがマッチしない.\Q~\Eに対応していないのかと思って
if (preg_match("|\\Qaaa/bbb.ccc\\E|","aaa/bbb.ccc")) print "match!\n";
としましたが,これはマッチする.
ということは,「\」によるエスケープが使えていない可能性が高いと考えて
if (preg_match("/\\Qaaa\\/bbb.ccc\\E/","aaa\\/bbb.ccc")) print "match!\n";
…これにマッチしました.かといって,「\」でエスケープしてやらないとエラーになります.
これはPCREに渡す前に処理しなければいけないはずなので,その部分で問題が起きているんだと思います.そもそも,Perlの正規表現の「/」って文字列の「"」にあたるものだと思うんですが….