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

Moriyoshi Koizumi php-dev@php.gr.jp
Wed, 02 Oct 2002 16:55:51 +0900


小泉です。

> 変更するなら今すぐした方がよいと思います。
> # 基本的にはereg_*()と同じ動作に変更した方が解り易い、
> # オーバーロードした時に便利と思います。
> 
> この変更で困るという方もいると思いますが、どうでしょうか?

なぜデフォルトで拡張モードになっていたのか、
そこが非常に不思議なところですが、

http://www.ruby-lang.org/ja/man-1.4/syntax.html#regexp

によると、拡張モードでは、

・# test のようにコメントがつけられる
・white space, 改行コード, '\f' が無視される

とのことなので、

<?php
$pat = <<< HERE
# comment
# comment
abc
HERE;
var_dump( mb_ereg( $pat, 'abcdef' ) );
?>

のようなコードでは、拡張モードが on でなくなると、混乱を生じます。

mb_ereg_match() や mb_ereg_replace() のように、オプションが指定できる関数
なら、おそらく使われている方の大多数は、オプションを空に指定されていると思
います。
一方で、mb_ereg() や mb_split() のように、正規表現オプションを指定できない
ものだと、拡張モードになっている旨はドキュメントにも触れられていないので、
ユーザの方がバグと考えても仕方がないでしょう。

したがって、BC のことを考えて少し慎重になるとすれば、
mb_ereg() と mb_split() だけ、拡張モードを off にするのがよいかと
思われます。

いかがでしょうか?

# 一度 users で調査してもいいかもしれませんね