当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用正则表达式解析Java中的HTML?》经验,为你挑选了4个好方法。

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

谢谢你的任何建议.



1> Dave Webb..:

使用正则表达式从HTML中提取值总是一个错误.它可能首先出现的HTML语法要复杂得多,而且即使是非常复杂的正则表达式,页面也很容易识别出来.

请改用HTML Parser.另请参阅主要Java HTML解析器的优缺点是什么?


这取决于你在做什么.如果您正在处理来自随机源的大量HTML,则HTML Parser可能会失败,并且可能需要比正则表达式更多的内存和处理.例如,Heritrix网络爬虫使用正则表达式在HTML页面上进行链接提取.

2> Henryk Konse..:

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

如果您的问题涉及Regex API而不是现实生活中的问题(例如学习目的) - 您可以使用以下代码执行此操作:

String html = "foo bar baz qux foo";
Pattern p = Pattern.compile("");
Matcher m = p.matcher(html);
while(m.find()) {
   System.out.println(m.group(0));
   System.out.println(m.group(1));
}

输出是:


link1

link2

请注意懒惰/不情愿的资格赛*?必须使用以减少分组到单个标记.组0是整个匹配,组1是下一组匹配(下一对括号).



3> mP...:

不要使用正则表达式使用NekoHTML或TagSoup,这是一个提供SAX或DOM的桥梁,就像在XML方法中访问HTML文档一样.



4> Scott Cowan..:

如果你想沿着html解析路线走下去,Dave和我推荐这里的代码来解析锚点标签的字符串数据并打印它们的href.

因为你只是使用锚标签,你应该只使用正则表达式,但如果你想做更多,请使用解析器.在Mozilla的HTML解析器是最好的了.

File parserLibraryFile = new File("lib/MozillaHtmlParser/native/bin/MozillaParser" + EnviromentController.getSharedLibraryExtension());
                String parserLibrary = parserLibraryFile.getAbsolutePath();
                //  mozilla.dist.bin directory :
                final File mozillaDistBinDirectory = new File("lib/MozillaHtmlParser/mozilla.dist.bin."+ EnviromentController.getOperatingSystemName());

        MozillaParser.init(parserLibrary,mozillaDistBinDirectory.getAbsolutePath());
MozillaParser parser = new MozillaParser();
Document domDocument = parser.parse(data);
NodeList list = domDocument.getElementsByTagName("a");

for (int i = 0; i < list.getLength(); i++) {
    Node n = list.item(i);
    NamedNodeMap m = n.getAttributes();
    if (m != null) {
        Node attrNode = m.getNamedItem("href");
        if (attrNode != null)
           System.out.println(attrNode.getNodeValue());

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有