原です。

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

> |原です。
> |
> |正規表現が空にマッチする時、最長条件が守られていないように
> |見えます。
> 
> 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.)