de ruby-doc.org sobre el patrón de sustitución para gsub
:
las secuencias de \ 1, \ 2, y así sucesivamente puede usarse para interpolar grupos sucesivos en el partido
Esto incluye la secuencia \'
, que significa "todo lo que hice después".
De cualquier "\\'"
o '\\\''
los dos para producir \'
(recordar que \
tiene que ser escapado en ambos dobles y cadenas entre comillas sencillas, y que '
tiene que ser escapado en las cadenas entre comillas simples, por lo que usar comillas simples en este case realmente hace las cosas más verbose). Ej .:
puts "before*after".gsub("*", "\\'")
"beforeafterafter"
puts "before*after".gsub("*", '\\\'')
"beforeafterafter"
Lo que se quiere gsub
a ver a continuación, es en realidad \\'
, que puede producirse tanto por "\\\\'"
y '\\\\\''
. Por lo tanto:
puts s.gsub("'", "\\\\'")
children\'s world
puts s.gsub("'", '\\\\\'')
children\'s world
o si tiene que ver mucho con \
se podría aprovechar el hecho de que cuando se utiliza /.../
(o %r{...}
) usted no tiene que hacer doble escapar las barras invertidas:
puts s.gsub("'", /\\'/.source)
children\'s world
Consigue el mundo de los niños. – Jirapong
No, no es así. – Magnar
@Jirapong la razón por la que cree que se obtiene \\ es porque la consola de rieles no muestra la cadena, pero muestra cómo se podría construir la cadena. Entonces, si ingresas "\\", se mostrará el evento "\\" aunque es una cadena con una sola barra invertida. Para descubrir qué hay realmente en la cadena, debe usar ** puts **. Por ejemplo, pone "\\" mostrará una sola barra invertida. – Brian