[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 オプション自体は必要な場合もあると思います。

そうですね。
ちょっと極端なことを言ってしまいました :)