Java正则表达式:如果字符串不包含某些顶级域列表,则如何匹配该字符串

时间:2017-05-26 10:28:52

标签: java regex

我试图建立一个正则表达式,我尝试过滤网址,只有那些未在我的正则表达式中给出的人才会产生匹配。

如果网址中没有test1.com或test2.com,则会导致匹配。

我希望不会导致匹配的顶级域名(test1.com和test2.com)始终使用https协议,可以包含子域名并且在顶级域名后面有路径" .com&#34 ;

最后一次尝试是以下但仍然无效...

https?://([a-z0-9]+[.])((test1)|(test2))[.](com)/.*

regexplanet上的结果:

https://abc.test1.com/test.htm 

==> MATCH

www.google.com

==>没有比赛

https://123.test2.com/test.html 

==> MATCH

https://test2.com/test.html

==>没有比赛

我是否需要编写正则表达式,其字符串中没有test1.com和test2.com域的所有内容都会匹配?

1 个答案:

答案 0 :(得分:2)

这种模式应该有效:

^((?!test1\\.com|test2\\.com).)*$

试试:

System.out.println(Pattern.matches("^((?!test1\\.com|test2\\.com).)*$", "https://abc.test1.com/test.htm"));
System.out.println(Pattern.matches("^((?!test1\\.com|test2\\.com).)*$", "www.google.com"));
System.out.println(Pattern.matches("^((?!test1\\.com|test2\\.com).)*$", "https://123.test2.com/test.html"));
System.out.println(Pattern.matches("^((?!test1\\.com|test2\\.com).)*$", "https://test2.com/test.html"));

结果:

false
true
false
false