2009-04 << 2009-05 >> 2009-06

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の正規表現の「/」って文字列の「"」にあたるものだと思うんですが….