2016-08-12 13 views
5

gsubメソッドを使用してメールのすべての英数字を '#'文字に置き換えようとしていますが、Rubyは '@'文字の前にバックスラッシュを挿入しています。不適切なgsub置換

例えば:

"[email protected]".gsub(/[a-z0-9]/, "#")リターン"###\#@###.###"の代わり"####@###.###"。あなたはIRB/PRYで見る何

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

は、文字列の補間として解釈されている#@の防止は、次のとおりです。

+0

また、使用することができます '\ w'メタ文字:' "[email protected]" .gsub(/ \ /ワット、 "#") ' – orde

+0

を@ orde '\ w'と' [a-z0-9] 'は異なる文字集合です。 – mudasobwa

+1

バックスラッシュは '@'の前、 '#'の前に '@'の前に挿入されていません。 – Stefan

答えて

8

それは予想通り"####@###.###"返しにしてみてください。

下記の@Stefanによる非常に貴重なコメントも参照してください。

+2

もっと正確には['String#inspect'](http://ruby-doc.org/core-2.3.1/String.html#method-i-inspect)の結果です。 '#'に続けて '$'、 '@'、 '{'はエスケープされます。 – Stefan

3

trgsubよりも高速です:

puts "[email protected]".tr('a-zA-Z0-9', '#') 
# >> ###@###.###