Ghilas BELHADJ
Ghilas BELHADJ

Reputation: 14106

Match string that doesn't contain a specific word

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

Upvotes: 27

Views: 23446

Answers (4)

Joe Kennedy
Joe Kennedy

Reputation: 9443

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'] }

Upvotes: 0

Anton
Anton

Reputation: 3036

Just use

string !~ /dog/

to select strings you need.

Upvotes: 9

nfriend21
nfriend21

Reputation: 2200

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.

Upvotes: 3

HamZa
HamZa

Reputation: 14931

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

Upvotes: 55

Related Questions