[PHP-dev 518] Re: [Fwd: Japanese: mb_split broken?]
Yasuo Ohgaki
php-dev@php.gr.jp
Wed, 02 Oct 2002 08:37:34 +0900
大垣です。
Moriyoshi Koizumi wrote:
> 小泉です。
>
> 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', '' ); ?>
>
> とすると大丈夫です。
> これは、ドキュメントの問題のような気がします。
>
> しかし、分かりにくすぎるので、そもそも拡張モードの挙動を
> 変更した方がいいと思うのですが、どうでしょうか?
変更するなら今すぐした方がよいと思います。
# 基本的にはereg_*()と同じ動作に変更した方が解り易い、
# オーバーロードした時に便利と思います。
この変更で困るという方もいると思いますが、どうでしょうか?
--
Yasuo Ohgaki
>
> 以下のような感じです。
>
> 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'. */
>
>