【问题标题】: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 链接。

有什么建议吗?
谢谢

【问题讨论】:

  • 您是否尝试过显示您的比赛的第 1 组?

标签: 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】:

    您的正则表达式正在查看所有 &lt;a href... 标记。 “handle”总是用作“/dspace/handle”等,所以你可以使用这样的东西来抓取你正在寻找的网址:

    Pattern pattern = Pattern.compile("<a.+href=\"(/dspace/handle/.+?)\"");
    

    【讨论】:

      猜你喜欢
      • 2011-02-02
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多