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

标签 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

如果您需要更多信息,请告诉我。提前致谢。

最佳答案

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

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/

相关文章:

ruby - 以编程方式将电子邮件转换为 HTML 或 PDF

ruby - 为什么我在 Rails 控制台 (irb) 中运行 shell 命令时出错

javascript - Ruby 在重复函数时尝试存储数组元素

ruby-on-rails - 运行 Rails 应用程序时出错 - ExecJS::RuntimeError

ruby - Ruby1.9的调用方式

Java RegEx 全部替换以格式化 XML 中的数据

Javascript 正则表达式 : test people's name

php - 在文本中查找并替换日期/时间并将其设为粗体

javascript - 将字符串转换为数组后,我得到错误的数组长度

python - 在python中的另一个较长列表中搜索列表项