2016-08-12 98 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