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

Posted

技术标签:

【中文标题】匹配不包含特定单词的字符串【英文标题】:Match string that doesn't contain a specific word 【发布时间】:2012-07-24 03:11:52 【问题描述】:

我正在使用 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的网址,所以应该匹配第一个和第二个

【问题讨论】:

这个问题最好在发帖here 上搜索类似问题。 【参考方案1】:

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

说明

^ : 匹配行首 (?!.*dog) : 否定前瞻,检查单词 dog 是否不存在 .* :匹配所有内容(在这种情况下,换行符除外) $ : 匹配行尾

Online demo

【讨论】:

哇,这条信息出奇地难找。【参考方案2】:

随便用

string !~ /dog/

选择你需要的字符串。

【讨论】:

【参考方案3】:

实际上有一种非常简单的方法可以做到这一点,即使用 select。

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

这将返回一个 url 的数组,其中不包含单词“dog”。

【讨论】:

更简洁,array_of_urls.reject |url| url.match(/dog/) 【参考方案4】:

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

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

【讨论】:

以上是关于匹配不包含特定单词的字符串的主要内容,如果未能解决你的问题,请参考以下文章

在bash中匹配单词后的一行中打印特定字符串[重复]

如何选择包含特定子字符串的单词列表作为 SQL 查询(oracle)的一部分?

SQL(MySQL):匹配字符串中任何单词的首字母?

如何正确检查字符串是不是不包含特定单词?

不包含多个特定单词的字符串的正则表达式

如何使用正则表达式匹配不以某些字符开头或结尾的单词?