2010-02-01 37 views
24

No entiendo lo que está sucediendo aquí. ¿Cómo debo alimentar gsub para obtener la cadena "Yaho \ 'o"?Ruby gsub no escapa de comillas simples

>> "Yaho'o".gsub("Y", "\\Y") 
=> "\\Yaho'o" 
>> "Yaho'o".gsub("'", "\\'") 
=> "Yahooo" 
+1

Esta es una de las cosas más extrañas que he visto. –

Respuesta

27

\ 'significa $' que es todo después del partido. Escape del \ de nuevo y funciona

"Yaho'o".gsub("'", "\\\\'") 
+5

ruby ​​1.9.3 '" Yaho'o ".gsub (" '"," \\\\' ") =>" Yaho \\ 'o "' –

+1

No FUNCIONA ... Ver comentario arriba – theSociableme

+2

@AdrienSchuler Funciona, IRB muestra una doble barra invertida para que pueda ver que se ha escapado. '" Yaho'o ".gsub (" '"," \\\\ "). Length => 7' –

2
"Yaho'o".gsub("'", "\\\\'") 

Debido a que está escapando el carácter de escape, así como escape de la comilla simple.

1

Esto también lo hará, y que es un poco más legible:

def escape_single_quotes(str) 
    str.gsub(/'/) { |x| "\\#{x}" } 
end 

Si quieres escapar tanto una comilla sencilla y una barra invertida, por lo que puede insertar esa cadena en una cadena de rubíes con comillas dobles, entonces lo siguiente lo hará por usted:

def escape_single_quotes_and_backslash(str) 
    str.gsub(/\\|'/) { |x| "\\#{x}" } 
end 
+0

Usé el superior, y funcionó perfectamente. exactamente lo que necesitaba – nfriend21

Cuestiones relacionadas