PHPで正規表現のメタ文字をエスケープする

/ php

PHPを始めて感じたのは、「PHPは痒いところに手が届いた関数が豊富」ということ。mb_strimwidth関数のように、自分でもすぐに書けそうな関数も標準装備してくれているのが助かる。そんなわけで、最近は車輪の再発明にならないように、関数を探すクセがついた。

で、正規表現のメタ文字をエスケープしてくれるような関数って無いかなーと思って、検索したけど見つからず。無念。ありそうなんだけどなあ。

ということで、適当に作ってみた。

function escapeRegexp($str)
{
    $str = str_replace('\\', '\\\\', $str);
    $str = str_replace('*', '\\*', $str);
    $str = str_replace('+', '\\+', $str);
    $str = str_replace('.', '\\.', $str);
    $str = str_replace('?', '\\?', $str);
    $str = str_replace('(', '\\(', $str);
    $str = str_replace(')', '\\)', $str);
    $str = str_replace('{', '\\{', $str);
    $str = str_replace('}', '\\}', $str);
    $str = str_replace('[', '\\[', $str);
    $str = str_replace(']', '\\]', $str);
    $str = str_replace('^', '\\^', $str);
    $str = str_replace('$', '\\$', $str);
    $str = str_replace('|', '\\|', $str);
     return $str;
}

全メタ文字が網羅されているか確認とってないけど、こんな感じで要望は満たせました。もっと効率的で確実な方法があると良いんだけど。教えて、エロい人!

このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt4/mt-tb.cgi/448
jk at 2008年11月 2日 08:15

preg_quote ではいかがですか?

dT at 2008年11月 2日 10:29

おお、ビンゴです!やっぱり用意されていたんですね。
探し方が足りなかったようです。

教えていただきありがとうございました!