gsub中的Ruby反向引用无法正常工作

时间:2011-12-28 11:29:40

标签: ruby regex

我对以下结果感到困惑,

我有一个这样的字符串: -

string = "hai\"hello\!tst\`\~end"

当我在反斜杠和反向引用(\ 1)之间使用空格时,它正常工作正常。

puts string.gsub(/([\"\!\`\~])/,'\\ \1')
=> hai\ "hello\ !tst\ `\ ~end

但同样的事情是没有空间的工作!该字符串将替换为反向引用号。

puts string.gsub(/([\"\!\`\~])/,'\\\1')
=> hai\1hello\1tst\1\1end

但我希望得到答案

=> hai\"hello\!tst\`\~end

如果您需要更多信息,请与我们联系。提前谢谢。

1 个答案:

答案 0 :(得分:3)

你需要的是更多的反斜杠:

string = "hai\"hello\!tst\`\~end"

puts string.gsub(/([\"\!\`\~])/,'\\\\\1')
# >> hai\"hello\!tst\`\~end

gsub的secont参数执行两步处理,以便\\\1成为\\1成为文字\1。有五个反斜杠,其中前四个减少为一个,\1转义序列完好无损,可以替换。