2013-09-20 4 views
2

Я хочу изменить "@" на "\40" в строке. Но я не в состоянии это сделать.Метод gsub не работает должным образом

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

Это меняется \40 с пространством. Есть идеи, как это реализовать?

+0

Вы в основном говорите программу: изменить ' "@"' 'в "0x040"', так что вы, по сути есть два "символы": одна repesents " 4 "в двоичном формате и ASCII-ноль. Вероятно, вы хотите '' \ x40 "' (это все еще просто '@' хотя), может быть, вы действительно хотите '' \\ x40'', тогда вы получите '' email \ x40example.com '' как литерал. Если вы буквально хотите заменить его на '\ 40', вам нужно использовать одинарные кавычки, так как они не интерполируются:' '\ 40'' – omninonsense

+2

Даже с одинарными кавычками это не работает. – oldergod

+0

@oldergod О, да. Это не сработало. Я предположил, что это будет без проверки. – omninonsense

ответ

6

Другим решением

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

Он дает выход как «srikanth \\ 40in.com» .. Thats fine! –

4

обратные косы имеют особое значение во втором параметре gsub. Они относятся к возможно подобранным группам регулярных выражений. Я попытался убежать, но не смог заставить его работать. Он работает таким образом, хотя:

s = "[email protected]" 
s['@'] = '\\40' 
s # => "srikanth\\40in.com" 
+0

@oldergod: в этом случае не имеет значения. –

+0

+1 Это одна из вещей, которые мне очень нравятся в Ruby, что у нас есть такие выразительные способы создания строк. –

4

\\40 не работает, потому что он относится к группе захвата. Из docs:

Если замена является String он будет заменен на совпадающей текста. Он может содержать обратные ссылки на захват групп паттерна формы \\d, где d является номером группы ...

Вы можете использовать gsub «ы хэш-синтаксис вместо:

Если вторым аргументом является хэш, а согласованный текст является одним из его ключей, соответствующее значение является заменой строки.

Пример:

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

+1 для использования 'gsub' с хешем! –

Смежные вопросы