I'm working with ruby with the match
method and I want to match an URL that doesn't contain a certain string with a regular Expression:
ex:
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
I want to match the URLs that doesn't contain the word dog
, so the 1st and the 2nd ones should be matched
Just use a negative lookahead ^(?!.*dog).*$
.
Explanation
^
: match begin of line
(?!.*dog)
: negative lookahead, check if the word dog doesn't exist
.*
: match everything (except newlines in this case)
$
: match end of line
Online demo
Just use
string !~ /dog/
to select strings you need.
There's actually an incredibly simple way to do this, using select.
array_of_urls.select { |url| !url.match(/dog/) }
this will return an array of the url's that don't contain the word 'dog' anywhere in it.
Another thing you can use is:
!url['dog']
With your example:
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'] }
You could also reject the urls that do contain 'dog'
:
array.reject { |url| url['dog'] }