【问题标题】:Get a href tag out of HTML从 HTML 中获取 href 标签
【发布时间】:2014-07-05 21:56:43
【问题描述】:

我有以下代码从正常工作的 XML 中获取 a href 标记网址:

Pattern p = Pattern.compile("<a[^>]+href\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>");
Matcher m = p.matcher(xmlString);
while (m.find())
    imagesURLs.add(m.group(1));

我有以下:

<a href="http://...">some text</a>

上面的代码让我在m.group(0) 中获得&lt;a href="http://..."&gt; 和在m.group(1) 中的http://...

我也想得到完整的&lt;a href="http://..."&gt;some text&lt;/a&gt;

如何通过修改正则表达式来实现这一点?

【问题讨论】:

  • 改用 HTML 解析器
  • 你能解释一下我为什么要这样做吗?它更快吗?
  • 因为正则表达式脆弱且不可维护(为此目的)
  • 在末尾添加另一个捕获组 (.*?)&lt;/a&gt; 并与 DOTALL modifier 一起使用,以使 . 也匹配换行符(参见 example)。使用 lazy 量词。

标签: java html regex


【解决方案1】:

所有关于使用正则表达式解析 html 的免责声明:你可以使用这个

(?is)(<a[^>]+href\s*=\s*(['"])([^'"]+)\2[^>]*>).*?</a>
  1. 第 0 组是整场比赛:&lt;a href="http://..."&gt;some text&lt;/a&gt;
  2. 第 1 组是开始标签:&lt;a href="http://..."&gt;
  3. 第 2 组是我添加的,以确保您的开盘报价与收盘报价相同。忽略它。 4 第 3 组是 url:http://...

查看this demo中的群组

如您所知,要在 Java 中使用,您需要转义一些字符。比如:

Pattern p = Pattern.compile("(?is)(<a[^>]+href\\s*=\\s*(['\"])([^'\"]+)\\2[^>]*>).*?</a>");

【讨论】:

  • @hasan 这是否为您解决了问题,还是您仍在努力解决?
猜你喜欢
  • 1970-01-01
  • 2017-01-16
  • 2016-01-09
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 2016-01-13
相关资源
最近更新 更多