2016-08-12 64 views
5

我试图用gsub方法用'#'字符替换电子邮件中的所有字母数字字符,但Ruby在'@'字符前插入反斜杠。不正确的gsub替换

E.g:

"[email protected]".gsub(/[a-z0-9]/, "#")回报"###\#@###.###"代替"####@###.###"

+0

您也可以使用'\ w'元字符:' “[email protected]” .gsub(/ \ W /, “#”)' – orde

+0

@ orde'\ w'和'[a-z0-9]'是不同的字符集合。 – mudasobwa

+1

请注意,反斜杠并未在'@'之前插入,而在'@'之前的'#'之前。 – Stefan

回答

8

它返回"####@###.###"如预期,尝试:

puts "[email protected]".gsub(/[a-z0-9]/, "#") 

你在IRB /撬看到的是被解释为字符串插值预防#@

请参考下面@Stefan的非常有价值的评论。

+2

更确切地说是['String#inspect']的结果(http://ruby-doc.org/core-2.3.1/String.html#method-i-inspect)。一个'#'后面跟着'$','@'或'{'将被转义。 – Stefan