2016-08-12 27 views
5

Próbuję zastąpić wszystkie znaki alfanumeryczne wiadomości e-mail znakiem "#" przy użyciu metody gsub, ale Ruby wstawia ukośnik odwrotny przed znakiem "@".Nieprawidłowa wymiana gsub

Np:

"[email protected]".gsub(/[a-z0-9]/, "#") powraca "###\#@###.###" zamiast "####@###.###".

+0

Można również użyć '\ w' Metaznak:' "[email protected]" .gsub (/ \ m/"#") ' – orde

+0

@ orde '\ w' i' [a-z0-9] 'są różnymi zestawami znaków. – mudasobwa

+1

Należy zauważyć, że odwrotny ukośnik nie jest wstawiany przed '@', ale przed '#' poprzedzającym '@'. – Stefan

Odpowiedz

8

Zwraca "####@###.###" zgodnie z oczekiwaniami, spróbuj:

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

Co widać w IRB/pry jest zapobieganie #@ interpretowane jako interpolacji smyczkowy.

Proszę również zapoznać się z bardzo cennym komentarzem @Stefan poniżej.

+2

Dokładniej wynik ['String # inspect'] (http://ruby-doc.org/core-2.3.1/String.html#method-i-inspect). "#", Po którym następuje '$', '@' lub '{' zostanie usunięte. – Stefan