方法gsub无法按预期工作

时间:2013-09-20 09:34:20

标签: ruby gsub

我想在字符串中将"@"更改为"\40"。但我无法这样做。

a = "srikanth@in.com"
a.gsub("@", "\40")
# => "srikanth in.com"

它正在用空格改变\40。知道如何实现这个吗?

3 个答案:

答案 0 :(得分:6)

另一种解决方案

puts a.gsub("@") {"\\40"}
# => srikanth\40in.com

答案 1 :(得分:4)

反斜杠在gsub的第二个参数中具有特殊含义。它们指的是可能匹配的正则表达式组。我尝试逃避,但无法让它工作。它的工作原理如下:

s = "srikanth@in.com"
s['@'] = '\\40'
s # => "srikanth\\40in.com"

答案 2 :(得分:4)

\\40无效,因为它指的是捕获组。来自docs

  

如果替换String,它将替换匹配的   文本。它可能包含对模式捕获组的反向引用   形式\\d,其中 d 是一个组号...

您可以改为使用gsub的哈希语法:

  

如果第二个参数是Hash,匹配的文本是其中一个键,则相应的值是替换字符串。

示例:

a.gsub('@', '@' => '\\40')
#=> "srikanth\\40in.com"