[PHP-users 12730] Re: mb_regex_set_options()の引数って?

Yasuo Ohgaki php-users@php.gr.jp
Wed, 22 Jan 2003 12:39:42 +0900


大垣です。

Moriyoshi Koizumi wrote:
> 知られているバグ:
> 
>   $ echo '<?php
>     print mb_ereg_replace("\$", "--", "abc\ndef\n", "");
>     ?>' | php
>
>     結果:
>       abc----
>       def----
>

# CGIには-rオプションがないので小泉さんのことですから
# 敢えて-rオプションを使わなかったのだと思いますが

ruby, perlと同じように直接コードを渡すには

$ php -r 'print mb_ereg_replace("\$", "--", "abc\ndef\n", "");'

でできます。結果は同じです。

ereg_replaceを使うと最後の\nしか置換しません。
(ビルトインregexライブラリ使用)

$ php -r 'print ereg_replace("\$", "--", "abc\ndef\n");'
abc
def
--

preg_replaceだと
$ php -r 'print preg_replace("/\$/m", "--", "abc\ndef\n");'
abc--
def--
--

$ php -r 'print preg_replace("/\$/", "--", "abc\ndef\n"););'
abc
def--
--

>   $ ruby -e 'print "abc\ndef\n".gsub(/$/, "--");'
> 
>     結果: 
>       abc--
>       def--
> 
>   $ perl -e '$_ = "abc\ndef\n"; $_ =~ s/$/--/mg; print $_;'
> 
>     結果: 
>       abc--
>       def--
>       --
> 
>   この3つの挙動は異りますので注意してください。
>   これはバグでしょうか?

興味深い結果ですね...

個人的にはrubyの結果が正しいように思えますが、正規表現
のスペシャリストでは無いので、あくまで個人的な感想です。

少なくともPCRE(Perl Compatible Regex)はPerl互換
なようです。

--
Yasuo Ohgaki