[PHP-users 29510] UTF-8、正規表現で全角スペースがヒットしないことがある?

goungoun gounx2 @ gmail.com
2006年 6月 26日 (月) 16:36:57 JST


はじめまして。
こちらには初投稿になります。

早速本題ですが、、

文字コードをUTF8で統一した環境で、mb_ereg_replace を使っていたところ
正規表現のキャラクタクラス(ex.[abcd])中に全角スペースを含む場合、意図した通り
に動作させることができず悩んでいます。

詳しく書いてみます、、

以下をUTF-8で保存して・・・
# ps.文字列中の空白は全て全角スペースです。
----------------------------------------------------------------------------
<?php
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');
$text = "あ い うえ";
echo "1:" . mb_ereg_replace("い ",   "<まっち>", $text, 'i') . "<br />\n";
echo "2:" . mb_ereg_replace("い[ ]", "<まっち>", $text, 'i') . "<br />\n";
echo "3:" . mb_ereg_replace("うえ",   "<まっち>", $text, 'i') . "<br />\n";
echo "4:" . mb_ereg_replace("う[え]", "<まっち>", $text, 'i') . "<br />\n";
?>
----------------------------------------------------------------------------

実行すると以下となりました。
----------------------------------------------------------------------------
1:あ <まっち>うえ
2:あ い うえ             ←★
3:あ い <まっち>
4:あ い <まっち>
----------------------------------------------------------------------------

私は、★行が以下となることを期待していたのですが。
----------------------------------------------------------------------------
2:あ <まっち>うえ
----------------------------------------------------------------------------


考えたことを書いてみます。

a."え"を使った場合は、3:に対して4:となるのに、
  全角スペースを使った場合は、1:に対して2:になる。
  完全に全角スペースはダメというわけではなくキャラクタクラス([]の中)
  中に使った場合のみの問題?

b.試しに、上記ソースの'UTF-8'部分を'EUC-JP'に書き換えて
  ソース自身もEUC-JPで保存して実行すると、期待通りの動作
  となりました。つまりUTF-8固有の問題?

なお、こちらの環境は、以下の通りです。
・PHP Version 4.4.1-pl1 (Windows)
・php.ini
    mbstring.internal_encoding EUC-JP

ちなみに以下も試してみましたが、期待通りの動作
とはなりませんでした。

・mbstring.internal_encoding を UTF-8に変更

・Linux環境
   PHP Version 4.3.10-16
   mbstring.internal_encoding  no value


何か心当たりある方はコメントお願いいたします<(_ _)>


-- 
goungoun <gounx2 @ gmail.com>
http://goungoun.dip.jp/app/



PHP-users メーリングリストの案内