[#1058] ruby 0.99.3-961119 available — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです.

19 messages 1996/11/19
[#1059] segm fault (Re ruby 0.99.3-961119 available) — sinara@... 1996/11/19

原です。

[ruby-list:1089] Re: [BUG?] REGEXP (Re ruby 0.99.3-961119 available)

From: sinara@...
Date: 1996-11-25 07:59:25 UTC
List: ruby-list #1089
原です。

> まつもと ゆきひろです.

> |原です。
> |
> |正規表現が空にマッチする時、最長条件が守られていないように
> |見えます。
> 
> perlも同じ動作をするので仕様ということにしておいてください.

そうですね。awk もそうです。


> 最長一致ということは「常に最長の一致を返す」という意味ではな
> く,ある一致がより長く延長できる時にはより長く一致させるとい
> う意味だとおもいます.たとえば 
> 
>   "abc" =~ /[a-z]*/
> 
> が""や"a"でなく"abc"と一致するようなことです.で,複数選択が

はい。最長はグローバルに見なくても、最左の方は見るんですよね。
"abc".sub(/b|./) { "(#$&)" } ==>  (a)bc
とか。


> ある時にはどうしても左側優先になると思います.でないと最後ま
> で検索しないと一致しているかどうか判定できなくなりますので,
> 一般的には効率が悪くなるでしょうから.


確かに効率は悪くなるでしょうが、そちらの方が正しい(?)のでは
ないでしょうか。/.|../ と書くと常に左側の . しかマッチしないわ
けですよね。この例だと見て明らかなんですが、複雑なものを書いた
時、たまにハマることがあるんですよね。正規表現が文字列を最後ま
で検索しなければならない場合はどうせしばしばあるので、この際、
効率より理屈を取るという手もあるかと思いますが。もっとも perl
に合っているのもうれしいけれど。

#今気がついたけど、"abc".gsub(/x?/){"(#$&)"} は 
#"abc".gsub(/x?/, '(\&)') と書けないのですね。
---===-=-=-=-=-=-=-=-=======--=-=-=-==-=-===-=-=-=-=-=-=--=-==-=--
                           Shin-ichro Hara(Nagaoka Univ.of Tech.)










In This Thread