【发布时间】:2011-09-28 00:02:19
【问题描述】:
我想用String.gsub(或其他方法)将所有& 字符替换为\&。我尝试了几种组合并阅读了another question here,但没有任何效果。
"asdf & asdf".gsub("&", "\\\&") => "asdf & asdf"
【问题讨论】:
标签: ruby string replace escaping
我想用String.gsub(或其他方法)将所有& 字符替换为\&。我尝试了几种组合并阅读了another question here,但没有任何效果。
"asdf & asdf".gsub("&", "\\\&") => "asdf & asdf"
【问题讨论】:
标签: ruby string replace escaping
我猜你使用的是 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 中为我生成了相同的单转义 & 符号,因此将其设置为四个(不是 11 个,只有 4 个就可以了)。
【讨论】:
您的链接问题提供了一个解决方案 - 使用 gsub 的块形式:
irb(main):009:0> puts "asdf & asdf".gsub("&"){'\&'}
asdf \& asdf
【讨论】:
' 分隔的。试试puts "asdf ' asdf".gsub("'"){"\\'"}
ruby-1.9.2-p180 :008 > puts "asdf & asdf".gsub(/&/, '\\\&')
asdf \& asdf
【讨论】:
puts,您将得到result.inspect,对于一个字符串,它会为您提供字符串,因为您必须用双引号键入它才能获得result。