如何使用正则表达式在Java中解析HTML?

2022-09-03 03:09:48

请问有人可以告诉我一个简单的方法,使用Java中的正则表达式在html文件中查找href和src标签吗?
然后,如何获取与标记关联的 URL?

感谢您的任何建议。


答案 1

使用正则表达式从 HTML 中提取值始终是一个错误。HTML语法比它可能首先出现要复杂得多,并且页面很容易捕捉到即使是非常复杂的正则表达式。

请改用 HTML 解析器。另请参阅领先的 Java HTML 解析器的优缺点是什么?


答案 2

其他答案是正确的。Java Regex API不是实现目标的合适工具。使用其他答案中提到的高效,安全和经过良好测试的高级工具。

如果您的问题涉及正则表达式API而不是现实生活中的问题(例如学习目的) - 您可以使用以下代码完成:

String html = "foo <a href='link1'>bar</a> baz <a href='link2'>qux</a> foo";
Pattern p = Pattern.compile("<a href='(.*?)'>");
Matcher m = p.matcher(html);
while(m.find()) {
   System.out.println(m.group(0));
   System.out.println(m.group(1));
}

输出为:

<a href='link1'>
link1
<a href='link2'>
link2

请注意,懒惰/不情愿的限定词*?必须使用,以便将分组减少到单个标记。组 0 是整个匹配项,组 1 是下一组匹配项(下一对括号)。