2

Rubular ( Example ) 如何获得匹配组?

/regex(?<named> .*)/.match('some long string')

match方法(在示例中)仅返回第一个匹配项。

scan方法返回一个没有命名捕获的数组。

获取一组命名捕获(不拆分)的最佳方法是什么?

4

1 回答 1

3

我一直认为 Rubular 的工作原理是这样的:

matches = []

"foobar foobaz fooqux".scan(/foo(?<named>\w+)/) do
  matches << Regexp.last_match
end

p matches
# => [ #<MatchData "foobar" named:"bar">,
#      #<MatchData "foobaz" named:"baz">,
#      #<MatchData "fooqux" named:"qux"> ]

如果我们使用enum_forand $~(的别名Regexp.last_match),我们可以让它更红一点:

matches = "foobar foobaz fooqux".enum_for(:scan, /foo(?<named>\w+)/).map { $~ }
于 2016-07-21T03:26:24.347 回答