[PHP-dev 523] Re: [Fwd: Japanese: mb_split broken?]
Moriyoshi Koizumi
php-dev@php.gr.jp
Thu, 03 Oct 2002 10:56:26 +0900
小泉です。
塚田さん、はじめまして。
最近開発にコミットし始めました。よろしくお願いします。
さて、
> > mb_ereg_replace() も同様に、デフォルトでは拡張モードですので、
> >
> > <?php echo mb_ereg_replace( ' ', '-', 'a b c d e' ); ?>
> >
> > とやると、妙な結果を得ます。
>
> 確かに予想外の結果なのかもしれませんが、
> 空の正規表現だと、幅がゼロの部分にマッチするので、
> そのままでは無限になってしまいます。
> なので、そういう場合は、1文字先から繰り返すように
> 改修した記憶があります。
> これが理論的に正しいのかは自信がありません。
「妙」というのは、
<?php echo ereg_replace( ' ', '-', 'a b c d e' ); ?>
<?php echo preg_replace( '/ /', '/-/', 'a b c d e' ); ?>
との比較からでた言葉です。なお、
<?php echo preg_replace( '', '/-/', 'a b c d e' ); ?>
こうすると、たしかに空の正規表現になりますが、
結局はホワイトスペースの扱い方の問題になるのでしょうか。
> >
> > <?php echo mb_ereg_replace( ' ', '-', 'a b c d e', '' ); ?>
> >
> > とすると大丈夫です。
> > これは、ドキュメントの問題のような気がします。
> >
> > しかし、分かりにくすぎるので、そもそも拡張モードの挙動を
> > 変更した方がいいと思うのですが、どうでしょうか?
> >
>
> 正規表現ライブラリの方を変更するのは反対です。
> x オプション自体は必要な場合もあると思います。
そうですね。
ちょっと極端なことを言ってしまいました :)