2

简单的问题,但我找不到简单的答案

我有一个字符串

str = 'a&b' 

我需要将 & 替换为 \&

str
>>> a\&b

在php中我可以这样做

str_replace('&', '\\&', $str); \\ >>> a\&b

但是在红宝石中这不起作用

str.gsub('&', '\\&')
>>> a&b
4

2 回答 2

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
于 2013-05-28T07:53:07.210 回答
4

使用块的解决方案:

> puts 'a&b'.gsub('&') { '\&' }
a\&b

在块形式\中,不解释带有前缀的反向引用,就像 的替换参数中的情况一样gsub

在块形式中,有 $n、$&... 变量可用。

在您使用的 gsub 形式中,双反斜杠必须用另一个反斜杠转义。

于 2013-05-28T07:58:52.483 回答