2012-07-20 80 views
1

我一直试图在文档中找到类似的内容,但失败了。我想要的是遍历字符串中的正则表达式匹配,并将MatchData传递给该块。寻找正则表达式#match_all

  • 还有Regexp#match,但它只发现一个匹配;
  • String#scan,但该块仅接收捕获阵列或匹配串,不饱满MatchData。由于你失去了命名的捕获能力,这特别吸引Oniguruma。
  • 还有Regexp::last_match,所以我可以真的去了scan路线,但似乎丑陋和不雅。

我这么想吗?

回答

0

是的,你错过了一些东西。从MatchData文档:

MatchData是特殊变量$〜类型,并且是由 正则表达式匹配#和Regexp.last_match返回的对象类型。它 封装模式匹配的所有结果,结果通常 通过特殊变量$ &,$',$`,$ 1,$ 2等访问。

最重要的一点是大胆的。

你已经有ALL单一MatchData对象匹配。这不是你想要的吗?

+1

否 - 您在MatchData中拥有所有单个匹配的捕获。如果你有多个匹配,你需要多个'MatchData'对象。 – Amadan 2012-07-20 01:27:40

+0

我觉得这个问题有正确的答案,那么:http://stackoverflow.com/questions/6804557/how-do-i-get-the-match-data-for-all-occurrences-of-a-ruby-regular -expression-in – Strelok 2012-07-20 01:29:07

+0

这是一个可行的答案,但我不会说这是一个正确的答案(来自Ruby,而不是来自i-blis)。我爱Ruby,但这里是一个疣。 – Amadan 2012-07-20 01:33:19