我需要一个正则表达式来验证这样的URL:
主要目标是忽略使用.br 或完成的所有网址以及.br加上子目录。
在Java中我这样做:
Pattern.compile("http:\\/\\/(www\\.)?url-example.com^(\\.br).*");
但是它不起作用......我认为^(\\.br)
出了问题。有没有办法用regex实现这种验证?
答案 0 :(得分:3)
使用如下所示的暗示前瞻。
Pattern.compile("http://(www\\.)?url-example\\.com(?!.*\\.br\\b).*");
(?!.*\\.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