Ответ 1
из ruby-doc.org о шаблоне замены для gsub
:
последовательности\1,\2 и т.д. могут использоваться для интерполяции последовательных групп в матче
Это включает в себя последовательность \'
, что означает "все, что соответствует тому, что я сопоставил".
Либо "\\'"
, либо '\\\''
будут выдавать \'
(помните, что \
должен быть экранирован как в двойных, так и в одинарных кавычках, а '
должен быть экранирован в однокасканных строках, поэтому использование одинарных кавычек в этом случае фактически делает вещи более подробными). Например:.
puts "before*after".gsub("*", "\\'")
"beforeafterafter"
puts "before*after".gsub("*", '\\\'')
"beforeafterafter"
То, что вы хотите видеть gsub
, на самом деле \\'
, которое может быть создано как "\\\\'"
, так и '\\\\\''
. Итак:
puts s.gsub("'", "\\\\'")
children\ world
puts s.gsub("'", '\\\\\'')
children\ world
или если вам нужно много сделать с \
, вы можете воспользоваться тем фактом, что при использовании /.../
(или %r{...}
) вам не нужно удваивать escape-обратную косую черту:
puts s.gsub("'", /\\'/.source)
children\ world