[#20227] dyna_vars problem? — Tanaka Akira <akr@...17n.org>

しばらく前から、稀に Ruby が core を吐くという問題を追いかけているので

15 messages 2003/05/19
[#20234] Re: dyna_vars problem? — matz@... (Yukihiro Matsumoto) 2003/05/19

まつもと ゆきひろです

[#20236] Re: dyna_vars problem? — Tanaka Akira <akr@...17n.org> 2003/05/19

In article <1053363181.529491.30320.nullmailer@picachu.netlab.jp>,

[ruby-dev:20273] Re: /()*\1/ =~ ""

From: kkosako@...
Date: 2003-05-22 06:00:13 UTC
List: ruby-dev #20273
> -----Original Message-----
> From: Tanaka Akira [mailto:akr@m17n.org]
> ...
> 問題は繰り返しの中身が長さ 0 にマッチしたときをどう扱うかということな
> のですが、まぁ、無限ループを防ぐにはちょっと特殊な扱いをしないといけな
> いのは確かで、それをどんな具合に特殊にするか、というのが問題です。
> ...
> まぁ、1.8 や鬼車それぞれの仕様ということで手をつけないというのが妥当な
> ような気もしますが、なにか思うところのある人はいますか?

PCREはどうなっているのか気になって調べてみました。

PCRE 4.2
OK:   /()*/  =~ ''
OK:   /()+/  =~ ''
OK:   /()*\1/ =~ ''
OK:   /(?:()|())*\1/ =~ ''
FAIL: /(?:()|())*\1\2/ =~  ''
OK:   /(?:()|()){0,10}\1\2/ =~  ''
FAIL: /(?:()|()|()|(x)|()|())*\2\5/ =~  'x'

鬼車とほとんど同じです。
違っているのは、無限ではない繰り返し(6番目の例)のときに、
鬼車は、無限の繰り返しと同じように長さ0のチェックをしています。
これは不要なので止めるように変更して、同じになりました。
--
小迫@出向中

In This Thread

Prev Next