我一直试图在文档中找到这样的东西,但失败了。我想要的是迭代字符串中的正则表达式匹配,并将MatchData
传递给块。
Regexp#match
,但它只找到一个匹配项; String#scan
,但该块只接收捕获数组或匹配字符串,而不是MatchData
。当你失去了命名的捕获能力时,这尤其与Oniguruma相比很糟糕。Regexp::last_match
,所以我实际上可以走scan
路线,但看起来很丑陋而且不够优雅。我错过了什么吗?
答案 0 :(得分:2)
请参阅Is there a function like String#scan, but returning array of MatchDatas?
您最好的选择是使用String#scan
和Regexp.last_match
。
答案 1 :(得分:0)
是的,你错过了一些东西。来自MatchData文档:
MatchData是特殊变量$〜的类型,是类型 Regexp #matre和Regexp.last_match返回的对象。它 封装模式匹配的所有结果,通常会产生结果 通过特殊变量$&,$',$`,$ 1,$ 2等访问。
重要的一点是粗体。
您已在单个MatchData对象中拥有 ALL 匹配项。不是你想要的吗?