PHP preg_match等PCRE系正規表現でUTF-8日本語がうまく処理できない

PHP

preg_match等のPCRE(Perl互換正規表現)でUTF-8の日本語のパターンマッチがうまくいかないことがあります。
preg系はUTF-8日本語を正しく処理できますが、パターン修飾子「u」を正規表現の最後につけてUTF-8エンコードされた文字列であることを明示しなければなりません。

パターン修飾子「u」の例です。

 preg_match("/日本語/u", $text)

ちなみに、最近のRHEL系ディストリビューションの標準RPMのPHPではmb_ereg系は正規表現エンジンにrubyと同じくoniguruma(鬼車)を使っているので、PCREの方がmb_eregより早いとは限らないようです。
最近のPHPでは、PCREのメリットは、mbstringに依存しないで済むことだと思います。
また、鬼車とPCREは非互換の部分があるので、その点をどう考えるかということもあると思います。

  • 参考

各種正規表現エンジンのベンチマーク(2010/7/21 MacOSX10.6.4 + gcc-4.2.1)
http://lh3lh3.users.sourceforge.net/reb.shtml

カテゴリーPHP

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です