我需要检查一个URL是否有效。网址应包含一些子目录,像为:如何在Java中使用正则表达式验证URL?
example.com/test/test1/example/a.html
网址应包含子目录test
,test1
和example
。如何使用Java中的正则表达式检查URL是否有效?
我需要检查一个URL是否有效。网址应包含一些子目录,像为:如何在Java中使用正则表达式验证URL?
example.com/test/test1/example/a.html
网址应包含子目录test
,test1
和example
。如何使用Java中的正则表达式检查URL是否有效?
既然你想在正则表达式做的,这个怎么样?
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());
不妨做'url.startsWith(“example.com/test/test1/example /”)'如果这就是你所做的一切。 – polygenelubricants 2010-08-10 21:30:43
真的......但出于性能考虑,最好先预编译模式,然后再重复使用它。 – limc 2010-08-10 21:55:12
没有,编译正则表达式仍然不会超过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
您可以简单地将您的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/")) {
// ...
}
我的意思是给定的URL应该包含某些目录不是一个有效的URL对不起我的英文不好 – see 2010-08-10 21:15:37
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"));
可以摆脱'? true:false'。这是多余的,表达式已经返回一个'boolean' :) – BalusC 2010-08-10 21:20:59
@BalusC谢谢。 – dave 2010-08-10 21:22:30
'example.com/nope.html?query = lol/test/test1/example/lol'怎么办? – polygenelubricants 2010-08-10 21:28:11
这个问题是使用正则表达式在这里找到答案: Regular expression to match URLs in Java
但您可以使用库Apache Commons验证程序来使用一些经过验证的验证程序,而不是编写自己的验证程序。
这里是库: http://commons.apache.org/validator/
而且这里的URL验证的的javadoc。 http://commons.apache.org/validator/apidocs/org/apache/commons/validator/UrlValidator.html
所以你要检查wheter与否的URL是有效的,或者如果它cotains测试和test1的? – NullUserException 2010-08-10 21:09:59
是...我这就是正确的... – see 2010-08-10 21:11:19
如果有什么是'测试%的31'代替'test1'? – polygenelubricants 2010-08-10 21:26:43