SOFTELメモ

Softel Inc.

正規表現メモ(2)

問題

正規表現のマッチの結果がおかしい?

答え

UTF-8以外の環境でのマルチバイト文字を使った、
[  ]* ([半角スペース全角スペース]*) とか
[あいうえお]+ とかの正規表現は、
危険だと反射的に思っていいと思います。

例えば、EUC環境で、

preg_match('/[あ]+/', '△△△', $m);
var_dump($m);

↓ マッチする

array(1) {
[0]=>
string(6) "△△△"
}

みたいな事が起きます。

理由

EUC-JPの「あ」はa4a2
EUC-JPの「△」はa2a4
EUC-JPの「△△△」はa2a4a2a4a2a4
→ あ(a4a2)が△△△(a2a4a2a4a2a4)にマッチしてしまう

関連するメモ

コメント