正则表达式以避免URL中的可选组

时间:2014-12-12 10:59:36

标签: java regex

我需要一个正则表达式来验证这样的URL:

主要目标是忽略使用.br 完成的所有网址以及.br加上子目录。

在Java中我这样做:

Pattern.compile("http:\\/\\/(www\\.)?url-example.com^(\\.br).*");

但是它不起作用......我认为^(\\.br)出了问题。有没有办法用regex实现这种验证?

1 个答案:

答案 0 :(得分:3)

使用如下所示的暗示前瞻。

Pattern.compile("http://(www\\.)?url-example\\.com(?!.*\\.br\\b).*");

DEMO

(?!.*\\.br)否定前瞻断言.com之后的字符可以是.br

之内的任何字符
String s1 = "http://url-example.com";
String s2 = "http://url-example.com/anything";
String s3 = "http://www.url-example.com";
String s4 = "http://www.url-example.com/anything";
String s5 = "http://url-example.com.br";
String s6 = "http://www.url-example.com.br";
String s7 = "http://www.url-example.com.br/anything";
System.out.println(s1.matches("http://(www\\.)?url-example\\.com(?!.*\\.br\\b).*"));
System.out.println(s2.matches("http://(www\\.)?url-example\\.com(?!.*\\.br\\b).*"));
System.out.println(s3.matches("http://(www\\.)?url-example\\.com(?!.*\\.br\\b).*"));
System.out.println(s4.matches("http://(www\\.)?url-example\\.com(?!.*\\.br\\b).*"));
System.out.println(s5.matches("http://(www\\.)?url-example\\.com(?!.*\\.br\\b).*"));
System.out.println(s6.matches("http://(www\\.)?url-example\\.com(?!.*\\.br\\b).*"));
System.out.println(s7.matches("http://(www\\.)?url-example\\.com(?!.*\\.br\\b).*"));

<强>输出:

true
true
true
true
false
false
false