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