Match string that doesn't contain a specific w

2019-01-23 02:53发布

问题:

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

回答1:

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



回答2:

Just use

string !~ /dog/

to select strings you need.



回答3:

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.



回答4:

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


标签: ruby regex match