我对以下结果感到困惑,
我有这样一个字符串:-
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
如果您需要更多信息,请告诉我。提前致谢。
最佳答案
你需要的是更多的反斜杠:
string = "hai\"hello\!tst\`\~end"
puts string.gsub(/([\"\!\`\~])/,'\\\\\1')
# >> hai\"hello\!tst\`\~end
对gsub
的第二个参数进行两步处理,使\\\1
变成\\1
变成文字\1
。有了五个反斜杠,前四个减少为一个,\1
转义序列完整无缺,可以替换。
关于gsub 中的 Ruby 反向引用无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8655331/