[PHP-dev 517] Re: [Fwd: Japanese: mb_split broken?]

Moriyoshi Koizumi php-dev@php.gr.jp
Wed, 02 Oct 2002 05:52:40 +0900


小泉です。

mb_split() と mb_ereg() の正規表現は拡張モードのものとして扱われるので、

$comps = mb_split( ' ', 'a b c d e' );

や

$comps = mb_split( "\n", "a\nb\nc\nd\ne" );

としても、正しい結果は得られません。
' ' '\r' '\n' '\f' '\t' がだめですね。

代わりに、
$comps = mb_split( '[[:space:]]', 'a b c d e' );
とやると、期待通りの結果を得られます。

mb_ereg_replace() も同様に、デフォルトでは拡張モードですので、

<?php echo mb_ereg_replace( ' ', '-', 'a b c d e' ); ?>

とやると、妙な結果を得ます。

<?php echo mb_ereg_replace( ' ', '-', 'a b c d e', '' ); ?>

とすると大丈夫です。
これは、ドキュメントの問題のような気がします。

しかし、分かりにくすぎるので、そもそも拡張モードの挙動を
変更した方がいいと思うのですが、どうでしょうか?

以下のような感じです。

Index: mbregex.c
===================================================================
RCS file: /repository/php4/ext/mbstring/mbregex.c,v
retrieving revision 1.9
diff -u -r1.9 mbregex.c
--- mbregex.c   28 Aug 2002 02:08:57 -0000      1.9
+++ mbregex.c   1 Oct 2002 20:49:57 -0000
@@ -2442,6 +2442,7 @@
       }
       goto normal_char;

+#if 0_moriyoshi
     case ' ':
     case '\t':
     case '\f':
@@ -2449,6 +2450,7 @@
     case '\n':
       if (options & MBRE_OPTION_EXTENDED)
        break;
+#endif

     default:
     normal_char:               /* Expects the character in `c'.  */



Yasuo Ohgaki <yohgaki@ohgaki.net> wrote:

> 大垣です。
> 
> 使っていないので気が付きませんでしたがmb_split()
> 壊れているらしいです...
> 
> # テストスクリプトが必要ですね...
> 
> -------- Original Message --------
> Subject: Japanese: mb_split broken?
> Date: Tue, 01 Oct 2002 22:36:24 +0900
> From: jean_christian@myrealbox.com (Jean-Christian Imbeault)
> To: php-i18n@lists.php.net
> Newsgroups: php.i18n
> 
> mb_split appears to be broken in 4.2.3. I have submitted a bug report
> but in the mean time ... my app is broken and I badly need a fix :(
> 
> Can anyone recommend a way for me to split japanese strings on white space?
> 
> I need this for user entered search string, which are space delimited.
> 
> Thanks.
> 
> Jc
> 
> 
> _______________________________________________
> PHP-dev mailing list
> PHP-dev@php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-dev