匹配不包含特定单词的字符串

时间:2012-07-25 16:04:35

标签: ruby regex match

我正在使用match方法处理ruby,我希望将不包含某个字符串的URL与正则表达式匹配: 例如:

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

我想匹配不包含单词dog的网址,因此第一个和第二个网址应匹配

4 个答案:

答案 0 :(得分:42)

只需使用否定前瞻^(?!.*dog).*$

<强>解释

  • ^:匹配行的开头
  • (?!.*dog):负向前瞻,检查单词dog是否不存在
  • .*:匹配所有内容(本例中除了换行符)
  • $:匹配行尾

Online demo

答案 1 :(得分:9)

只需使用

string !~ /dog/

选择您需要的字符串。

答案 2 :(得分:2)

使用select实际上有一种非常简单的方法。

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

这将返回一个不包含“dog”字样的url数组。

答案 3 :(得分:0)

您可以使用的另一件事是:

!url['dog']

用你的例子:

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

你也可以拒绝包含'dog'的网址:

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