From: Wakou Aoyama Date: 1999-03-05T02:45:03+09:00 Subject: [ruby-dev:5987] Re: [REQ] variable of regex 青山です。 Thu, Mar 04, 1999 at 04:46:27PM +0900 において Keiju ISHITSUKA さん曰く: > 正規表現でカッコにマッチした文字列を取り出すのって $1... ぐらいしかな > いですよね. カッコが多くなると数えるのが大変ですし, その前にカッコが増 > えたりすると番号がずれるので嬉しくないことが多いです. > > ということで, マッチした文字列を変数に代入してもらえると嬉しいのですが. そういえば、"abc" =~ /(a)b(c)/ が ["a", "c"] を返してくれると嬉しかっ たりするのですが、どうでしょうか? a, b = ("abc" =~ /(a)b(c)/) という感じで、カッコが増えた場合は a,null,b とかすればいいので、$1... の場合のようにずれた全てを書き換えるよりは手間も少なくなりますし。 マッチした位置のインデックスについては index がありますし、=~ の返り値 の利用ってあまり無いように思うのですが。 (Perl での受け取り手が配列の場合の動作をデフォルトにするのはいかがでしょ う。という事ですね。) ----- 第二案 デフォルトの動作を変更するのはマニュアルの書き換え等面倒な面もあります し、scan が実装されてからは現在でも次のような感じで実現はできています。 a, b = "abc".scan(/(a)b(c)/)[0] 気になるのは1度のマッチが欲しいだけなのに scan では繰り返しマッチを行っ てしまうのがもったいないかな。と。 という事で、//g と \G の導入。あるいは逆に1度だけに限定するなんらかの オプションの導入。 とはいえ、Single, Once, Only, Never どれもすでに使われていて良さそうな 略字がありませんね... この件に限定すればマッチを1度だけ行うようにした scan()[0] に相当する single_scan() なんていうのでもいいかもしれませんが。 ----- どちらも以前になんらかの話が出ていると思われますが、検索に引っかからな かったので、ついでに聞いてみました。 -- 青山 和光 Wakou Aoyama