Экранирование "$" с помощью gsub () - PullRequest
2 голосов
/ 06 апреля 2011

Я пытаюсь заменить предыдущий "$" в строке на "\$". Например, «$5 special» должно стать «\$5 special».

Я пробовал:

"$5 special".gsub(/^\$/, "\$") => "$5 special"  
"$5 special".gsub(/^\$/, "\\$") => "\\$5 special"  
"$5 special".gsub(/^\$/, "\\\$") => "\\$5 special"

Кто-нибудь знает, как это сделать?

Ответы [ 3 ]

6 голосов
/ 06 апреля 2011

Ваш второй пример,

"$5 special".gsub(/^\$/, "\\$")

Должен это сделать.Причина, по которой вы видите две косые черты в выходных данных, связана с тем, что Ruby экранирует косую черту в строке для ее печати в виде литерала.Если вы распечатаете его в стандартном формате, вы увидите, что ожидаете:

irb(main):009:0> a = "$5 special".gsub(/^\$/, "\\$")
=> "\\$5 special"
irb(main):011:0> print a
\$5 special=> nil
3 голосов
/ 06 апреля 2011

Просто используйте одинарные кавычки для замены:

>> "$5 special".gsub(/^\$/, '\$') #=> "\\$5 special"
>> puts "$5 special".gsub(/^\$/, '\$') #=> nil
\$5 special
0 голосов
/ 08 апреля 2011

gsub также может принимать строки, в этом случае вам не нужно экранировать $:

"$5 special".gsub("$", '\$') #=> "\\$5 special"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...