在Java中使用Regex解析HTML标签

时间:2014-01-18 09:22:27

标签: java html html-parsing

我想解析html标签和标签的内容。我可以使用Java UrlConnection将html加载为字符串。我使用这个正则表达式:<([A-Za-z][A-Za-z0-9]*)\\b[^>]*>(.*?)</\\1>但我无法获得所有标签。是否有更灵活的正则表达式来获取所有类型的标签。注意:我可以轻松地使用 Jsoup 完成所有这些工作。 但我不应该使用任何库。

<div id="footer">   
    <div id="footerbody">
        <div id="footerabout">
            <h3>Bilgi</h3>
            <ul>
                <li><a href="/page/history">Tarihçe</a></li>
                <li><a href="/page/visionandmission">Vizyon ve Misyon</a></li>
                <li><a href="/page/education">Eğitim</a></li>
                <li><a href="/page/staff">Kadro</a></li>
                <li><a href="/page/labs">Laboratuvarlar</a></li>
                <li><a href="/page/classrooms">Sınıflar</a></li>
                <li><a href="/page/commissions">Komisyonlar</a></li>
            </ul>
       </div>
       <div id="footersitemap">
        <h3>Site Haritası</h3>
       </div>
</div>

是否可以获得此输出。

tag : div
   content : id=footer

...等

感谢。

2 个答案:

答案 0 :(得分:1)

我不明白为什么你不想使用图书馆? 您永远不应该使用Regex来解析HTML和其他标记语言 正则表达式不是为此目的而制作的。
使用专用库来执行此操作 您可以使用HTML CleanerNekoHTMLJTidy 他们是很好的HTML解析器。

答案 1 :(得分:0)

每个人似乎都对有人试图用正则表达式解析HTML这一事实感到非常不安,所以你可以等待很长时间才能得到答案。

问题出在这里

<div id="footer">   
    <div id="footerbody">
         <div id="footerabout">
         .... whatever
         </div>

您的正则表达式匹配上面的整个文本,从最外面的开头到最里面的结束div

如果你知道你的文字是这样的,你可以用某种方式解决它。编写一个识别三个嵌套div的正则表达式可能是一个很好的练习。但我真的需要一些真正的解析器。