ruby - sacar - cómo se escribe en el teclado la diagonal invertida
¿Cómo reemplazar la barra invertida con doble barra invertida? (1)
Estoy tratando de reemplazar las barras invertidas en mi cadena con dos barras invertidas así:
str.gsub!("//", "////")
Pero, no hace nada. Estoy confundido...
Tenga en cuenta que esta respuesta fue dada en el contexto de ruby 1.9. Como ruby 2.0 tiene un nuevo motor de expresiones regulares, puede que no sea válido en ese contexto.
Esto funciona:
str.gsub!("//", "//////")
str.gsub!("//", "////////") # also, will always work
Edición: Explicación (a través de http://www.ruby-forum.com/topic/143645 proporcionada por @vache)
Descargo de responsabilidad: no estoy familiarizado con el funcionamiento interno del motor de expresiones regulares de Ruby, cualquier información aquí se deduce del artículo mencionado anteriormente.
Lo básico es saber que la cadena de reemplazo se evalúa 2 veces.
La primera vez que las barras inclinadas realizan su trabajo como escapes en la cadena, en la segunda vez, gsub buscará referencias de grupo en la cadena.
como mencionó @ chris-johnsen, 6 barras no funcionan siempre. Esto me lleva a creer que algo como esto está sucediendo:
Para 6 barras. Se pasan 3 barras a la capa de referencia del grupo. La barra diagonal final no se interpreta como un carácter de escape porque nada viene después de ella, se interpreta como una barra invertida. Así que finalmente esta capa devuelve 2 barras. Si algo lo está perdiendo, la expresión fallará, ya que la tercera barra ahora funcionará como un carácter de escape.
Para 8 barras: 4 barras se pasan a la capa de referencia del grupo. Las cuatro barras se reducirán a dos.