我正在尝试创建一个正则表达式来使用Java从文本文档中提取URL,但到目前为止我还没有成功.我想要捕获的两个案例如下:
以http://以www开头的网址开头的网址.(从前面缺少协议)
以及查询字符串参数.
谢谢!我希望我真的更了解正则表达式.
干杯,
Phi*_*ier 27
如果你想确保你真正匹配一个网址,而不仅仅是一个以'www'开头的单词.您可以使用之前提到的DVK表达式.我稍微修改了它并写了一个小代码片段作为你的起点:
import java.util.*;
import java.util.regex.*;
class FindUrls
{
public static List<String> extractUrls(String input) {
List<String> result = new ArrayList<String>();
Pattern pattern = Pattern.compile(
"\\b(((ht|f)tp(s?)\\:\\/\\/|~\\/|\\/)|www.)" +
"(\\w+:\\w+@)?(([-\\w]+\\.)+(com|org|net|gov" +
"|mil|biz|info|mobi|name|aero|jobs|museum" +
"|travel|[a-z]{2}))(:[\\d]{1,5})?" +
"(((\\/([-\\w~!$+|.,=]|%[a-f\\d]{2})+)+|\\/)+|\\?|#)?" +
"((\\?([-\\w~!$+|.,*:]|%[a-f\\d{2}])+=?" +
"([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)" +
"(&(?:[-\\w~!$+|.,*:]|%[a-f\\d{2}])+=?" +
"([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)*)*" +
"(#([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)?\\b");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
result.add(matcher.group());
}
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
这个链接有非常好的 URL 正则表达式(顺便说一句,它们非常难以正确使用 - 薄 http/https;端口号、有效字符、GET 字符串、锚链接的井号等...)
http://flanders.co.nz/2009/11/08/a-good-url-regular-expression-repost/
Perl 具有包含 cannedRegExes 的 CPAN 库,包括 URL。不过不确定 Java :(
| 归档时间: |
|
| 查看次数: |
17036 次 |
| 最近记录: |