From: rubikitch Date: 2002-12-10T13:05:41+09:00 Subject: [ruby-list:36725] Re: scan /()*/ From: TOYOFUKU Chikanobu Subject: [ruby-list:36724] scan /()*/ Date: Tue, 10 Dec 2002 12:25:52 +0900 るびきちです。 > 下記のスクリプトで [["a","b","c"],["d","e","f","g"]] と > いう結果を期待したのですが [["b","c"],["f","g"]] でした。 > こういうときはどう書けばよいでしょうか。(できれば scan一発で) > > s = "hoge (a,b,c) fuga (d,e,f,g)" > p s.scan /\((?:(\w+),)*(\w+)\)/ この場合 /\((?:(\w+),)*/ が "b" と "f" にマッチします。 そもそもscanの返り値の内部配列の要素数ってグループの個数なのでは? irbsh[10@13:02](main):040:0> #### MULTI-LINE BEGIN #### s = "hoge (a,b,c) fuga (d,e,f,g)" p /\((?:(\w+),)*(\w+)\)/.match(s).to_a p /\((?:(\w+),)*/.match(s).to_a #### MULTI-LINE END #### ["(a,b,c)", "b", "c"] ["(a,b,", "b"] nil だから、こうかな・・・・。 irbsh[10@12:56](main):029:0> s.scan(/\((.+?)\)/).collect{|x| x.first.split(/,/)} [["a", "b", "c"], ["d", "e", "f", "g"]] るびきち☆ http://www.ruby-lang.org/~rubikitch/ ←Ruby大衆化計画(笑)