Как избежать слеша в одинарной кавычке? - PullRequest
1 голос
/ 19 февраля 2010

ruby ​​1.8.6 (2007-09-24 patchlevel 111)

str = '\&123'
puts "abc".gsub("b", str) => ab123c
puts "abc".gsub("b", "#{str}") => ab123c
puts "abc".gsub("b", str.to_s) => ab123c
puts "abc".gsub("b", '\&123') => ab123c
puts "abc".gsub("b", "\&123") => a&123c <--- This I want to achieve using temporary variable

Если я изменю str = '\&123' на str = "\&123", он работает нормально, но я получаю str из match функциипоэтому я не могу указать его вручную в параграфах .... Есть ли способ изменить поведение строки 'string' на "string"?

Ответы [ 4 ]

0 голосов
/ 20 февраля 2010

@ Valentin

-> Я имел в виду, что str из матча не было принято дословно. Таким образом, появилось другое (более простое) решение, о котором я не знал ....

"abc".gsub("b") { str } -> a\&123c

0 голосов
/ 19 февраля 2010

Просто удалите обратную косую черту:

puts "abc".gsub("b", '&123')

Амперсанд не требуется защищать обратной косой чертой внутри одинарных кавычек (в отличие от двойных кавычек).

0 голосов
/ 19 февраля 2010

может быть, есть более простой способ, но код ниже работает

> str = '\&123'
> puts "abc".gsub("b", str.gsub(/\\&/o, '\\\\\&\2\1'))
> => a\&123c
0 голосов
/ 19 февраля 2010

Simple:

str = '\&123' <-- the result of your match function
str = str.gsub(/\\/, '\\\\')

Вы также можете посмотреть здесь .

...