Match string that doesn't contain a specific w

2019-01-23 02:12发布

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

标签: ruby regex match
4条回答
冷血范
2楼-- · 2019-01-23 02:52

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'] }
查看更多
三岁会撩人
3楼-- · 2019-01-23 02:53

Just use

string !~ /dog/

to select strings you need.

查看更多
爷的心禁止访问
4楼-- · 2019-01-23 02:53

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.

查看更多
Evening l夕情丶
5楼-- · 2019-01-23 03:03

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

查看更多
登录 后发表回答