我很困惑为什么我通过'\ 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"
答案 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
)。
puts "123 456 789".gsub(/(\d)\d\b/, '\1')