2010-08-10 34 views
1

我需要检查一个URL是否有效。网址应包含一些子目录,像为:如何在Java中使用正则表达式验证URL?

example.com/test/test1/example/a.html 

网址应包含子目录testtest1example。如何使用Java中的正则表达式检查URL是否有效?

+0

所以你要检查wheter与否的URL是有效的,或者如果它cotains测试和test1的? – NullUserException 2010-08-10 21:09:59

+1

是...我这就是正确的... – see 2010-08-10 21:11:19

+0

如果有什么是'测试%的31'代替'test1'? – polygenelubricants 2010-08-10 21:26:43

回答

1

既然你想在正则表达式做的,这个怎么样?

Pattern p = Pattern.compile("example\\.com/test/test1/example/[\\w\\W]*"); 

System.out.println("OK: " + p.matcher("example.com/test/test1/example/a.html").find()); 
System.out.println("KO: " + p.matcher("example.com/test/test2/example/a.html").find()); 
+0

不妨做'url.startsWith(“example.com/test/test1/example /”)'如果这就是你所做的一切。 – polygenelubricants 2010-08-10 21:30:43

+0

真的......但出于性能考虑,最好先预编译模式,然后再重复使用它。 – limc 2010-08-10 21:55:12

+0

没有,编译正则表达式仍然不会超过String.startsWith()更快,因为startsWith()永远只是人物一个接一个,这就是正则表达式需要做的,即使在最佳的情况相匹配。另外,你的正则表达式不固定,并且正在使用.find(),所以它会返回true即使URL是HTTP://my.evil.domain/doBadStuff URL = example.com /测试/ TEST2 /example/a.html – Avi 2010-08-11 05:02:53

0

您可以简单地将您的URL作为参数传递给java.net.URL(String)构造函数,并检查构造函数是否抛出java.net.MalformedURLException

编辑但是,如果您只是想检查给定的字符串是否包含给定的子字符串,请使用String.contains(CharSequence)方法。例如:

String url = "example.com/test/test1/example/a.html"; 
if (url.contains("/test/test1/")) { 
    // ... 
} 
+0

我的意思是给定的URL应该包含某些目录不是一个有效的URL对不起我的英文不好 – see 2010-08-10 21:15:37

2
String url = "example.com/test/test1/example/a.html"; 
List<String> parts = Arrays.asList(url.split("/")); 
return (parts.contains("test") && parts.contains("test1") && parts.contains("example")); 
+0

可以摆脱'? true:false'。这是多余的,表达式已经返回一个'boolean' :) – BalusC 2010-08-10 21:20:59

+0

@BalusC谢谢。 – dave 2010-08-10 21:22:30

+1

'example.com/nope.html?query = lol/test/test1/example/lol'怎么办? – polygenelubricants 2010-08-10 21:28:11