4

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

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

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

4

1 回答 1

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]...访问这些组

于 2013-10-04T08:29:55.790 回答