为什么 gsub 的 '\1' 捕获组会产生这个字符串?
Why does gsub's '\1' capture group produce this string?
我很困惑为什么要通过 '\1' 分组来捕捉这种模式。我一次捕获两位数,但为什么它会跳过这里:
"123 456 789".gsub(/(\d)(\d)/, '')
=> "13 46 79"
我可以理解 '\0' 给我原始字符串:
"123 456 789".gsub(/(\d)(\d)/, '[=11=]')
=> "123 456 789"
这也让我很困惑,但是一旦我了解'\1'是做什么的,我就能理解'\2':
"123 456 789".gsub(/(\d)(\d)/, '')
=> "23 56 89"
正则表达式匹配 "12"
、"45"
、"78"
,gsub
将它们替换为 "1"
、"4"
、"7"
,分别给出 "13 46 79"
.
要获得12 45 78
,您需要使用
(\d)\d\b
并替换为</code>。</p>
<p>见<a href="https://regex101.com/r/zA0hK7/2" rel="nofollow">demo</a></p>
<p>在这里,我们匹配一个数字并捕获它(<code>(\d)
),然后我们匹配另一个位于单词边界\b
之前的数字(\d
)。
puts "123 456 789".gsub(/(\d)\d\b/, '')
我很困惑为什么要通过 '\1' 分组来捕捉这种模式。我一次捕获两位数,但为什么它会跳过这里:
"123 456 789".gsub(/(\d)(\d)/, '')
=> "13 46 79"
我可以理解 '\0' 给我原始字符串:
"123 456 789".gsub(/(\d)(\d)/, '[=11=]')
=> "123 456 789"
这也让我很困惑,但是一旦我了解'\1'是做什么的,我就能理解'\2':
"123 456 789".gsub(/(\d)(\d)/, '')
=> "23 56 89"
正则表达式匹配 "12"
、"45"
、"78"
,gsub
将它们替换为 "1"
、"4"
、"7"
,分别给出 "13 46 79"
.
要获得12 45 78
,您需要使用
(\d)\d\b
并替换为</code>。</p>
<p>见<a href="https://regex101.com/r/zA0hK7/2" rel="nofollow">demo</a></p>
<p>在这里,我们匹配一个数字并捕获它(<code>(\d)
),然后我们匹配另一个位于单词边界\b
之前的数字(\d
)。
puts "123 456 789".gsub(/(\d)\d\b/, '')