Tenga en cuenta que el reverso (no usar .quote()) también puede ser útil si está buscando construir una expresión regular usando una cadena.
Jesse
"si realmente solo desea verificar una coincidencia de subcadena, simplemente puede hacer if goo.include?(foo)" => Verdadero cuando esté interesado en verificar la existencia. Si está interesado en reemplazar y ya está usando String.gsub, entonces Regexp.quote puede ser su única opción.
Isaac Betesh
Solo para agregar a Jesse en caso de que no sea obvio, esto significa simplemente pasar la cadena de caracteres a los que no necesita escapar Regexp.newo Regexp.compile.
dylankb
Gracias por la útil explicación de por qué podríamos querer usar Regexp.quote
Wylliam Judd
7
Probablemente Regexp.escape(foo)sería un punto de partida, pero ¿hay alguna buena razón por la que no pueda usar la interpolación de expresión más convencional "my stuff #{mysubstitutionvariable}":?
Además, solo puede usar !goo.match(foo).nil?con una cadena literal.
Descubrí que puedo insertar fácilmente en una expresión regular sin usar Regexp.quote o Regexp.escape si solo uso comillas simples en mi cadena de entrada: (una coincidencia de dirección IP)
IP_REGEX ='\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
my_str ="192.0.89.234 blahblah text 1.2, 1.4"# get the first ssh key # replace the ip, for demonstration
my_str.gsub!(/#{IP_REGEX}/,"192.0.2.0")
puts my_str # "192.0.2.0 blahblah text 1.2, 1.4"
Esto me ayudó cuando necesitaba usar la misma porción larga de una expresión regular varias veces. No es universal, pero se ajusta al ejemplo de la pregunta, creo.
Respuestas:
Igual que la inserción de cadena.
fuente
Tenga
Regexp.quote
en cuenta que la respuesta de Jon L. es importante.Si solo haces la versión "obvia":
entonces los puntos en el texto de la coincidencia se tratan como comodines regexp y
"0.0.0.0"
coincidirán"0a0b0c0"
.Tenga en cuenta también que si realmente solo desea verificar una coincidencia de subcadena, simplemente puede hacer
que no requiere una cita adicional o preocuparse por caracteres especiales.
fuente
.quote()
) también puede ser útil si está buscando construir una expresión regular usando una cadena.if goo.include?(foo)
" => Verdadero cuando esté interesado en verificar la existencia. Si está interesado en reemplazar y ya está usando String.gsub, entonces Regexp.quote puede ser su única opción.Regexp.new
oRegexp.compile
.Probablemente
Regexp.escape(foo)
sería un punto de partida, pero ¿hay alguna buena razón por la que no pueda usar la interpolación de expresión más convencional"my stuff #{mysubstitutionvariable}"
:?Además, solo puede usar
!goo.match(foo).nil?
con una cadena literal.fuente
fuente
Utilice Regexp.new:
fuente
Aquí hay otra respuesta limitada pero útil:
Descubrí que puedo insertar fácilmente en una expresión regular sin usar Regexp.quote o Regexp.escape si solo uso comillas simples en mi cadena de entrada: (una coincidencia de dirección IP)
las comillas simples solo interpretan \\ y \ '.
http://en.wikibooks.org/wiki/Ruby_Programming/Strings#Single_quotes
Esto me ayudó cuando necesitaba usar la misma porción larga de una expresión regular varias veces. No es universal, pero se ajusta al ejemplo de la pregunta, creo.
fuente
fuente