[#36686] 1.1 < 61.1 - 60.0 — Shin-ichiro HARA <sinara@...>

原です。

19 messages 2002/12/06

[#36770] www.ruby-lang.orgリニューアル準備のお知らせ — TADA Tadashi <sho@...>

ruby-lang.orgのwebmasterチームでは、タイムリーな情報提供と使いやすい

11 messages 2002/12/16

[ruby-list:36725] Re: scan /()*/

From: rubikitch <rubikitch@...>
Date: 2002-12-10 04:05:41 UTC
List: ruby-list #36725
From: TOYOFUKU Chikanobu <toyofuku@juice.or.jp>
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大衆化計画(笑)


In This Thread