为什么gsub的'\ 1'捕获组会产生这个字符串?

时间:2015-08-11 22:44:43

标签: ruby regex gsub

我很困惑为什么我通过'\ 1'分组捕获这个模式。我一次捕获两位数,但为什么跳过这里:

"123 456 789".gsub(/(\d)(\d)/, '\1')
=> "13 46 79"

我可以理解'\ 0'给我原始字符串:

"123 456 789".gsub(/(\d)(\d)/, '\0')
=> "123 456 789"

这也让我很困惑,但是一旦我知道'\ 1'正在做什么,我就能理解'\ 2':

"123 456 789".gsub(/(\d)(\d)/, '\2')
=> "23 56 89"

2 个答案:

答案 0 :(得分:4)

正则表达式匹配"12""45""78"gsub将其替换为"1""4""7"分别给予"13 46 79"

答案 1 :(得分:2)

要获得12 45 78,您需要使用

(\d)\d\b

并替换为\1

请参阅demo

在这里,我们匹配一个数字并将其捕获((\d)),然后我们匹配在字边界\d之前的另一个数字(\b)。

IDEONE demo

puts "123 456 789".gsub(/(\d)\d\b/, '\1')