我有以下情况不符合我的预期,而且,我做错了什么,但我找不到那是什么。该脚本匹配句子中的四个字母单词。我想找到一种迭代匹配组的方法。
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
为零?
答案 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]
...