替换“&”到“\&”在Ruby中似乎不可能?

时间:2011-07-04 09:08:03

标签: ruby string replace escaping

我想用&(或其他方法)将所有\&个字符替换为String.gsub。我已经尝试了几种组合并阅读another question here,但没有什么可行的。

  "asdf & asdf".gsub("&", "\\\&") => "asdf & asdf"

3 个答案:

答案 0 :(得分:10)

您的关联问题提供了解决方案 - 使用gsub的块形式:

irb(main):009:0> puts "asdf & asdf".gsub("&"){'\&'}
asdf \& asdf

答案 1 :(得分:2)

我猜你正在使用1.8。在1.8中,irb说明了这一点:

>> "asdf & asdf".gsub("&", "\\\&")
=> "asdf & asdf"
>> puts "asdf & asdf".gsub("&", "\\\&")
asdf & asdf

这与你所看到的相符。但是,如果你添加另一个反斜杠,你会得到你想要的东西:

>> puts "asdf & asdf".gsub("&", '\\\\&')
asdf \& asdf

四重反斜杠方法在1.9.2和1.8.7中为我生成相同的单逃逸&符号,所以把它变为四(不是十一,只有四个会做)。

答案 2 :(得分:1)

ruby-1.9.2-p180 :008 > puts "asdf & asdf".gsub(/&/, '\\\&')
asdf \& asdf