.scan()
複数回一致させるために使用する必要があります。
p s.scan(/a/).to_a
また、グループ化を使用すると、一致全体に対して 1 つの結果が得られ、グループごとに 1 つの結果が得られます ( を使用する場合.match()
。どちらの結果も正規表現では同じです。
いくつかの例:
> /(a)/.match(s).to_a
=> ["a", "a"] # First: Group 0 (overall match), second: Group 1
> /(a)+/.match(s).to_a
=> ["aaaa", "a"] # Regex matches entire string, group 1 matches the last a
> s.scan(/a/).to_a
=> ["a", "a", "a", "a"] # Four matches, no groups
> s.scan(/(a)/).to_a
=> [["a"], ["a"], ["a"], ["a"]] # Four matches, each containing one group
> s.scan(/(a)+/).to_a
=> [["a"]] # One match, the last match of group 1 is retained
> s.scan(/(a+)(a)/).to_a
=> [["aaa", "a"]] # First group matches aaa, second group matches final a
> s.scan(/(a)(a)/).to_a
=> [["a", "a"], ["a", "a"]] # Two matches, both group participate once per match