正規表現のパターン文字列に日本語文字を使うときの注意

preg_match関数やpreg_replace関数、ereg関数などの正規表現のパターン文字列は、Shift_JIS文字列を使うとエラーが出ることがあります。
あくまで正規表現のパターン文字列に日本語文字を使ってはいけないのではなくて、日本語文字を使うときには注意しないといけないということです。

次のようなコードではWarningエラーが出ます。

if(preg_match("/ゼータ/", $str)){
  echo "OK";
}else{
  echo "NG";
}
Warning: preg_match() [function.preg-match]: Compilation failed: missing terminating ] for character class at offset 10

これは、Shift_JISの2バイト目に正規表現構文の特殊文字が含まれるときに起こります。

正規表現でエラーが出る文字の例

文字文字コード
815B
835B
835D

この5BはASCIIコードでは『 [ 』、5DはASCIIコードでは『 ] 』です。

回避方法

これを回避するには、preg_quoteを使います。

if(preg_match("/".preg_quote("ゼータ","/")."/", $str)){
  echo "OK";
}else{
  echo "NG";
}

関連記事

スポンサーリンク

Doctrineでモデルを作成する

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る