【问题标题】:Trying to parse links in an HTML directory listing using Java尝试使用 Java 解析 HTML 目录列表中的链接
【发布时间】:2011-08-18 01:35:30
【问题描述】:
请有人帮我从 HTML 页面解析这些链接
- http://nemertes.lis.upatras.gr/dspace/handle/123456789/2299
- http://nemertes.lis.upatras.gr/dspace/handle/123456789/3154
- http://nemertes.lis.upatras.gr/dspace/handle/123456789/3158
我想使用这些链接中常见的“handle”字进行解析。
我正在使用命令[Pattern pattern = Pattern.compile("<a.+href=\"(.+?)\"");],但它会解析我页面的所有href 链接。
有什么建议吗?
谢谢
【问题讨论】:
标签:
java
html
parsing
href
【解决方案1】:
看起来你的正则表达式做错了。而不是
Pattern pattern = Pattern.compile("<a.+href=\"(.+?)\"");
试试:
Pattern pattern = Pattern.compile("<a\\s+href=\"(.+?)\"");
第一个模式上的“a.+”至少匹配任何字符一次。如果您打算设置空格字符,请改用 '\s+'。
以下代码完美运行:
String s = "<a href=\"http://nemertes.lis.upatras.gr/dspace/handle/123456789/2299\"/> " +
"<a href=\"http://nemertes.lis.upatras.gr/dspace/handle/123456789/3154\" /> " +
"<a href=\"http://nemertes.lis.upatras.gr/dspace/handle/123456789/3158\"/>";
Pattern p = Pattern.compile("<a\\s+href=\"(.+?)\"", Pattern.MULTILINE);
Matcher m = p.matcher(s);
while(m.find()){
System.out.println(m.start()+" : "+m.group(1));
}
输出:
0 : http://nemertes.lis.upatras.gr/dspace/handle/123456789/2299
72 : http://nemertes.lis.upatras.gr/dspace/handle/123456789/3154
145 : http://nemertes.lis.upatras.gr/dspace/handle/123456789/3158
【解决方案2】:
您的正则表达式正在查看所有 <a href... 标记。 “handle”总是用作“/dspace/handle”等,所以你可以使用这样的东西来抓取你正在寻找的网址:
Pattern pattern = Pattern.compile("<a.+href=\"(/dspace/handle/.+?)\"");