dT*blog

design and programming

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;
}

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

Posted by dT by 00:16

トラックバック

このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt/mt-tb.cgi/448

コメント

preg_quote ではいかがですか?

Posted by jk at 2008年11月02日 08:15

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

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

Posted by dT at 2008年11月02日 10:29




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30