Cadena de coincidencia que no contiene una palabra específica

Estoy trabajando con ruby ​​con el método de match y quiero hacer coincidir una URL que no contenga una cadena determinada con una expresión regular: ej:

 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 hacer coincidir las URL que no contienen la palabra dog , por lo que la primera y la segunda deben coincidir

Simplemente use un lookahead negativo ^(?!.*dog).*$ .

Explicación

  • ^ : partido comienzo de línea
  • (?!.*dog) : lookahead negativo, verifique si la palabra dog no existe
  • .* : empareja todo (excepto las nuevas líneas en este caso)
  • $ : partido final de línea

Demo en linea

Solo usa

 string !~ /dog/ 

para seleccionar las cadenas que necesita.

En realidad, hay una manera increíblemente sencilla de hacer esto, utilizando select.

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

esto devolverá una matriz de direcciones URL que no contienen la palabra “perro” en ninguna parte de ella.

Otra cosa que puedes usar es:

 !url['dog'] 

Con tu 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 puede rechazar las URL que contienen 'dog' :

 array.reject { |url| url['dog'] } 
Intereting Posts