寻找Regexp#match_all

时间:2012-07-20 01:15:53

标签: ruby

我一直试图在文档中找到这样的东西,但失败了。我想要的是迭代字符串中的正则表达式匹配,并将MatchData传递给块。

  • Regexp#match,但它只找到一个匹配项;
  • String#scan,但该块只接收捕获数组或匹配字符串,而不是MatchData。当你失去了命名的捕获能力时,这尤其与Oniguruma相比很糟糕。
  • 还有Regexp::last_match,所以我实际上可以走scan路线,但看起来很丑陋而且不够优雅。

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

请参阅Is there a function like String#scan, but returning array of MatchDatas?

您最好的选择是使用String#scanRegexp.last_match

答案 1 :(得分:0)

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

  

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

重要的一点是粗体。

您已在单个MatchData对象中拥有 ALL 匹配项。不是你想要的吗?