[#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:20294] Re: /()*\1/ =~ ""

From: kkosako@...
Date: 2003-05-27 06:27:58 UTC
List: ruby-dev #20294
> -----Original Message-----
> From: Tanaka Akira [mailto:akr@m17n.org]
> > 確かにそういう問題がありました。
> > 位置が違うということは、選択子の選択順序が違っているということになり
> ます。
> 
> 順序というか、() が位置 0 にマッチした後、位置 1 にマッチすることで状
> 態が変化するかどうかの違いというつもりなんですが。

はい、理解しているつもりです。
ただ、最終結果の位置が1となった場合は、無限回の繰り返しの最後以外の
ところで()ではなくaが選択されているように結果として解釈できるので、
正しくないという意味です。    /(?:()|a)*$/ =~ "a"

選択順序はどうでもよいのであれば、いつaを選択しても良いので、
位置1でも正しいと思います。

> こんな例を考えつきました。
> 
>   /(?:\1a|())*/ =~ "a"
> 
> $0 は "" になるのか "a" になるのか、また、
> $~.begin(1) は 0 になるのか 1 になるのか、さて?

鬼車とPCRE方式では、""にしかなりませんが、
正しい答えは、"a"と1でしょう。
--
小迫@出向中

In This Thread

Prev Next