如何用ruby中的转义单引号替换单引号

时间:2012-11-19 16:49:55

标签: ruby regex escaping gsub

我正在尝试用ruby 1.9.3和1.8.7中字符串中的转义单引号(\')替换单引号(')。

确切的问题字符串是“您确定要删除'%@'”。此字符串应变为“您确定要删除\'%@ \'”

使用.gsub!(/ \'/,“\'”)会产生以下字符串“你确定要%@'%@”。

有关正在发生的事情的任何想法?

3 个答案:

答案 0 :(得分:7)

String#gsub形式的

gsub(exp,replacement)有奇怪的怪癖影响替换字符串,有时需要大量的转义斜杠。 Ruby用户经常被指示使用块形式:

str.gsub(/'/){ "\\'" }

如果您想完全取消转义,请考虑使用备用字符串文字形式:

str.gsub(/'/){ %q(\') }

一旦习惯了这些类型的文字,使用它们来避免转义序列可以使你的代码更具可读性。

答案 1 :(得分:1)

替换替换字符串中的

\'表示“匹配后原始字符串的部分”。因此str.gsub!(/\'/,"\\'")会将'字符替换为其后的所有内容 - 这就是您所注意到的内容。

你需要进一步逃避替换中的反斜杠。 .gsub(/'/,"\\\\'")适用于我的irb控制台:

irb(main):059:0> puts a.gsub(/'/,"\\\\'")
Are you sure you want to delete \'%@\'

答案 2 :(得分:0)

你需要逃避反斜杠。那怎么样?

"Are you sure you want to delete '%@'".gsub(/(?=')/, "\\")
# => "Are you sure you want to delete \\'%@\\'"

以上应该是你想要的。您的预期结果是错误的。当字面意思是反斜杠时,没有办法真正看到一个反斜杠。