简单的问题,但我找不到简单的答案
我有一个字符串
str = 'a&b'
我需要更换&到\&
str
>>> a\&b
在php中,我可以这样做
str_replace('&', '\\&', $str); \\ >>> a\&b
但是在红宝石中这不起作用
str.gsub('&', '\\&')
>>> a&b
答案 0 :(得分:4)
2.0.0-p0 :018 > "a&b".gsub('&', '\\\&')
=> "a\\&b"
2.0.0-p0 :019 > _.chars.to_a
=> ["a", "\\", "&", "b"]
2.0.0-p0 :023 > puts "a&b".gsub('&', '\\\&')
a\&b
答案 1 :(得分:3)
使用块的解决方案:
> puts 'a&b'.gsub('&') { '\&' }
a\&b
在块形式中,不会解释前缀为\
的反向引用,就像gsub
的替换参数中的情况一样。
在块形式中,可以使用$ n,$& ...变量。
以你正在使用的gsub形式,必须使用另一个反斜杠转义双反斜杠。