[PHP-dev 894]Re: mb_ereg_replaceについて

kkosako @ softbank.co.jp kkosako @ softbank.co.jp
2003年 9月 29日 (月) 14:50:20 JST


帰省中、MLをoffにしていたので、メールのリンクが切れています。

> さて、PHP_4_3 ブランチでの無限ループ問題はどうやら Ruby regex の仕様もしく
> はバグのような気がします。

私もバグだと思います。
あまり自信はないのですが、パッチを添付します。
ruby-dev MLにも送ってみますが、Rubyでは問題ないということで
放置されるかもしれません。

> もっとも、実際の Ruby では、SINGLELINE オプションと MULTILINE オプションの
> 組み合わせはもはや出来ないようですので (前は出来たような気がするんですが気
> のせい?)、結局は PHP 固有の問題ということになります。

CVSで確認してみると、去年の四月頃にPOSIXLINEオプションが
除去されていました。
理由は知らないのですが、Rubyには不必要な機能と判断されたのでは
ないかと思います。

> そもそもこの組み合わせ自体が間違いなのか何なのかは、正規表現に疎い私にはわ
> かりません。どなたか詳しい方、ご教示ください。

SINGLELINE オプションと MULTILINE オプションの組み合わせが間違い、ということ
は
ないと思います。
--
小迫@出向中

--- regex.c.old	2003-09-17 02:37:33.000000000 +0900
+++ regex.c	2003-09-29 14:41:37.000000000 +0900
@@ -3196,7 +3196,7 @@ re_search(bufp, string, size, startpos, 
     }
   }
   if (bufp->options & RE_OPTIMIZE_ANCHOR) {
-    if (bufp->options&RE_OPTION_SINGLELINE) {
+    if (bufp->options&RE_OPTION_MULTILINE && range > 0) {
       goto begbuf_match;
     }
     anchor = 1;


PHP-dev メーリングリストの案内