2012-07-25 16 views
22

estoy trabajando con rubí con el método match y quiero que coincida con una dirección URL que no contenga una determinada cadena con una expresión regular: ejemplo:cadena de coincidencia que no contenga una palabra específica

http://website1.com/url_with_some_words.html 
http://website2.com/url_with_some_other_words.html 
http://website3.com/url_with_the_word_dog.html 

Quiero que coincida con las direcciones URL que no contienen la palabra dog, por lo que el primero y los 2º debe corresponder

+0

Esta pregunta se responde mejor al publicar [aquí] (http://stackoverflow.com/questions)/406230/regular-expression-to-match-string-not-containing-a-word) Buscar SO para preguntas similares es una buena idea. –

Respuesta

34

Solo usa un lookahead negativo ^(?!.*dog).*$.

Explicación

  • ^: igualar comenzar de la línea
  • (?!.*dog): búsqueda negativa hacia delante, comprobar si la palabra perro no existe
  • .*: igualar todo (excepto los saltos de línea en este caso)
  • $: coincidencia al final de la línea

Online demo

+0

Guau, esta información fue sorprendentemente difícil de encontrar. –

7

Sólo tiene que utilizar

string !~ /dog/ 

para seleccionar las cadenas que necesita.

2

En realidad, hay una forma increíblemente sencilla de hacerlo, usando seleccionar.

array_of_urls.select { |url| !url.match(/dog/) } 

esto va a devolver una matriz de la url de que no contienen la palabra 'perro' en cualquier parte de ella.

+1

Más sucintamente, 'array_of_urls.reject {| url | url.match (/ dog /)} ' – nicholaides

+0

" increíblemente simple " – ahnbizcad

0

Otra cosa que puede utilizar es:

!url['dog'] 

Con su ejemplo:

array = [] 
array << 'http://website1.com/url_with_some_words.html' 
array << 'http://website2.com/url_with_some_other_words.html' 
array << 'http://website3.com/url_with_the_word_dog.html' 

array.select { |url| !url['dog'] } 

También podría rechazar las direcciones URL que hacer contienen 'dog':

array.reject { |url| url['dog'] } 
Cuestiones relacionadas