From: Tanaka Akira Date: 2003-03-03T12:58:36+09:00 Subject: [ruby-dev:19696] Re: [Oniguruma] Version 1.8.1 In article <1046626516.031539.4118.nullmailer@picachu.netlab.jp>, matz@ruby-lang.org (Yukihiro Matsumoto) writes: > えーと、そうか、違うものなんですね。ちゃんと調べないと。 Perl のはパターンのそこにさしかかると code が評価されてその結果がパター ンとしてそこに埋め込まれるというものですが、(?*name) は他の所に書いた 名前つきグループのパターンがそこに埋め込まれているように動作するという ものです。 どちらもパターンの埋め込みが一気に展開されるわけではないというところが、 かっこの対のような再帰的なものが書ける理由なのですが、code の評価が存 在しないのでなんでもできるわけではないぶん危険性が低く、また、静的な解 析がやりやすいところがちがいますね。ユーザの視点で見ると、code が書け るか書けないかというのはかなり大きな違いだと思います。 > この件については「独自の表現にせざるをえない」というのは納得 > です。ただし、「どういう表現にするか」については要議論かも。 いちおう、* は C の pointer の dereference からとっているんですが、そ れほどこだわりがあるわけではありません。適当な X を選んで \X と するのもいいかもしれませんね。 > また、?や\gのように「あるんだけど(それぞれ)違う」もの > についてもですね。 あわせるんなら g を k にして .NET かなぁ。 Python の (?P...) や (?P=name) というのはちょっと冗長なように思 います。 でも、置換文字列の記法まで .NET にあわせると \ 以外に $ も特殊記号にな ることになっちゃうし。うぅむ。 > ところで、?でグループされたものには番号も割り振られる > んでしょうか(Pythonは割り振られる、.NETは割り振られない(とい > うか、?で任意の番号に割り振り可能?)みたい)。自分で確 > 認すればよいのでしょうけど、ちょっと手抜き。 % ./ruby -e '"abcabc".scan(/(?.+)\1/) {|x| p $&}' "abcabc" % ./ruby -e '"abcabc".scan(/(?.+)\g/) {|x| p $&}' "abcabc" というようにどっちでも参照できるようですが。 > # いろいろあるのよ、明日preview2だし。 bug report に対する反応時間を調べると「いろいろある」度が測れるのかも しれない、とふと思いました。 -- [田中 哲][たなか あきら][Tanaka Akira]