如何迭代正则表达式的匹配组

时间:2013-10-04 08:26:12

标签: ruby regex

我有以下情况不符合我的预期,而且,我做错了什么,但我找不到那是什么。该脚本匹配句子中的四个字母单词。我想找到一种迭代匹配组的方法。

x = "This is a statement with four letter words like this"
result = x.match /(\b\w{4}\b)/
=> #<MatchData "This" 1:"This"> 

不幸的是,$1包含"This",但这就是我得到的。 $2应包含"with"nil。我究竟做错了什么?为什么$2 nil?为什么$n n>=2为零?

1 个答案:

答案 0 :(得分:5)

这是因为你的正则表达式只匹配一次并且只包含一个捕获组。

你可能想要:

x.scan /\b\w{4}\b/

将为您提供所有匹配的数组。

$1$2 ...设置为正则表达式的单个匹配中的组,例如

x.match(/(\b\w{4}\b).*(\b\w{4}\b)/)

$1设为'This',将$2设为'this'

也可以通过$~[1]$~[2],...或Regexp.last_match[1] ...

访问这些群组