正则表达式匹配否定ebay网站



我有一个匹配任何ebay网站的正则表达式:

(?i)^((http|https)://)?(w+.)*ebay.(w+.)+

我想否定它,以匹配所有,除了这个站点

I tried:

(?! pattern )
(?!pattern)
[^pattern]

但是没有任何效果。也许我的第一个正则表达式太不理想了?

java测试用例:

Pattern queryPattern = Pattern.compile("(?i)^((http|https)://)?(\w+\.)*ebay.(\w+.)+");
List<String> queries = new LinkedList();
queries.add("http://www.ebay.com/blabla");
queries.add("www.ebay.com/blabla");
queries.add("www.eBay.com/blabla");
queries.add("www.ebay.com.hk/blabla");
queries.add("www.ebay.co.uk");
queries.add("ttt.ebay.com");
queries.add("ru.ebay.com");
queries.add("test.ru.ebay.com");
queries.add("test.ru.ebAY.com");
queries.add("ebay.com");
queries.add("naebay.com");
queries.add("ru.naebay.ru");
queries.add("blah.ru");
for (String query : queries) {
  System.out.println(query + " " + queryPattern.matcher(query).find());
}

反应明显:

    Pattern queryPattern = Pattern.compile("(?i)^((http|https)://)?(\w+\.)*ebay.(\w+.)+");
    List<String> queries = new LinkedList<String>();
    ...
    for (String query : queries) {
        if (queryPattern.matcher(query).find() == false) {
            System.out.println("Non Ebay site: " + query + " " + queryPattern.matcher(query).find());
        }
    }
输出:

Non Ebay site: naebay.com false
Non Ebay site: ru.naebay.ru false
Non Ebay site: blah.ru false

避免使用正则表达式解析url、html等不规则模式。使用URL类

要解决这个问题,您可以在模式的开头使用(?!.*ebay),即在^

之后

你可以使用URL类来代替正则表达式的解析

URL url = new URL(yourURL);
if(!url.getHost().contains("ebay")){}

最新更新