我一直试图在文档中找到类似的东西,但失败了。我想要的是迭代字符串中的正则表达式匹配,并传递MatchData
给块。
- 有
Regexp#match
,但它只找到一个匹配项; - 有
String#scan
,但块只接收捕获数组或匹配字符串,而不是完整的MatchData
。这对 Oniguruma 来说尤其糟糕,因为您失去了命名的捕获功能。 - 还有
Regexp::last_match
,所以我实际上可以走这scan
条路,但它看起来丑陋和不雅。
我错过了什么吗?
我一直试图在文档中找到类似的东西,但失败了。我想要的是迭代字符串中的正则表达式匹配,并传递MatchData
给块。
Regexp#match
,但它只找到一个匹配项;String#scan
,但块只接收捕获数组或匹配字符串,而不是完整的MatchData
。这对 Oniguruma 来说尤其糟糕,因为您失去了命名的捕获功能。Regexp::last_match
,所以我实际上可以走这scan
条路,但它看起来丑陋和不雅。我错过了什么吗?
请参阅是否有类似 String#scan 的函数,但返回 MatchDatas 数组?
看起来你最好的选择是使用String#scan
and Regexp.last_match
。
是的,你错过了一些东西。从 MatchData 文档中:
MatchData 是特殊变量 $~ 的类型,是 Regexp#match 和 Regexp.last_match 返回的对象的类型。它封装了模式匹配的所有结果,通常通过特殊变量 $&、$'、$`、$1、$2 等访问的结果。
重要的部分以粗体显示。
您已经在单个 MatchData 对象中拥有所有匹配项。这不是你想要的吗?