正则表达式:忽略如果url包含两个单词之一

时间:2014-06-27 09:17:53

标签: regex

我正在跟踪某些网址的点击次数,只需要跟踪那些不包含“亚马逊”或“易趣”字样的网址

例如,我想跟踪此

http://www.website.co.uk/out?prov=tesco*
http://www.website.co.uk/out?prov=asda*
http://www.website.co.uk/out?prov=youtube*

但不是这个

http://www.website.co.uk/out?prov=amazon*

http://www.website.co.uk/out?prov=ebay*

我如何接近正则表达式?

网址末尾的星标是因为每个网址都有不同的参数

3 个答案:

答案 0 :(得分:0)

你可以使用下面的正则表达式来匹配网址,除了包含亚马逊或ebay的网址,

http:\/\/www(?!.*amazon|.*ebay).*

OR

http:\/\/www(?!(?:.*amazon|.*ebay)).*

DEMO

答案 1 :(得分:0)

由于您没有使用您正在使用的语言,因此我会假设Perl用于答案。在这里你想要使用类似的东西:

if ($url !~ /prov=amazon/i and
     $url !~ /prov=ebay/i) {
    do_stuff();
}

答案 2 :(得分:0)

否定前瞻

只需在正则表达式的头部添加一个负向前瞻:

(?!.*(?:amazon|ebay))

此断言:在字符串中的此位置,后面的内容不是某些字符,而是amazonebay

使用您的语言或引擎所需的任何语法来区分大小写,例如:

(?i)(?!.*(?:amazon|ebay))

一个跟踪所有人的正则表达式

跟踪您的三种模式的一个正则表达式可能是:

(?i)^(?!.*(?:amazon|ebay))http://website\.co\.uk/out\?prov=(?:tesco|asda|youtube)\S*$

请参阅demo

最终的正则表达式取决于实现上下文。

<强>参考