2010-08-19 15 views

Respuesta

58
Regexp.new(Regexp.quote('http://www.microsoft.com/')) 

Regexp.quote simplemente escapa los caracteres que tienen un significado especial expresión regular; toma y devuelve una cadena. Tenga en cuenta que . también es especial. Después de citar, puede agregar a la expresión regular según sea necesario antes de pasar al constructor. Un ejemplo simple:

Regexp.new(Regexp.quote('http://www.microsoft.com/') + '(.*)') 

Esto agrega un grupo de captura para el resto de la ruta.

+5

Por supuesto, esto también funciona: 'String.match (/ # {Regexp.quote ('http://www.microsoft.com/')} /) ' –

+0

reemplazando todos los tokens" CURRENT_YEAR "con un grupo de captura de cuatro dígitos del año: ' Regexp.new (input_string.split ("CURRENT_YEAR"). Map {| p | Regexp.quote (p)} .join ("(\\ d {4})")) ' –

+0

Dado esto, ¿no debería esto ser exitoso? pone "Correcto" si Regexp.new (Regexp.quote ('.')). Match ('A') – Joe

4

Regexp.quote o Regexp.escape se puede utilizar para escapar de forma automática las cosas para usted:

http://ruby-doc.org/core/classes/Regexp.html#M001195

El resultado se puede pasar a Regexp.new para crear un objeto Regexp, y entonces usted puede llamar al método del objeto .match y pase es la cadena para hacer coincidir (el orden opuesto es string.match(/regex/)).

8

También puede utilizar delimitadores arbitrarios en Ruby para expresiones regulares mediante el uso de r% y la definición de un personaje antes de la expresión regular, por ejemplo:

%r!http://www.microsoft.com/! 
+6

Si bien esto ayuda a evitar el escape de caracteres '/', no ayuda con cosas como paréntesis, paréntesis y otros personajes especiales. – Amber

+3

coincidencias "http://www-microsoft.com/". Peligroso. – kuboon

0

Usted puede simplemente utilizar comillas simples para escapar.

string.match('http://www.microsoft.com/') 

también se puede utilizar %q{} si necesita comillas simples en el texto mismo. Si necesita tener variables extrapoladas dentro de la cadena, use %Q{}. Eso es equivalente a las comillas dobles ". Si la cadena contiene expresiones de expresiones regulares (por ejemplo: .*?()[]^$) que desea extrapolado, utilice // o% {} r

-2

Para mayor comodidad acabo de definir

def regexcape(s) 
    Regexp.new(Regexp.escape(s)) 
end 
Cuestiones relacionadas