【问题标题】:Finding every table elements in html using regex in java在java中使用正则表达式查找html中的每个表元素
【发布时间】:2018-06-08 01:23:17
【问题描述】:

我有一个 html 作为字符串。我想用正则表达式找到每个表格元素(打开-关闭标签)。我为此尝试了<table(.*?)>.*</table> 模式。但它不起作用,因为它匹配第一个表打开标记和最后一个表关闭标记之间的内容。

这是我的代码:

Pattern pattern = Pattern.compile("<table(.*?)>.*</table>");

我也试过了:

Pattern pattern = Pattern.compile("<table(.*?)>.*</table>",Pattern.DOTALL);

这是一个例子:

    <table id="table1">
    </table>
    <table id="table2">
       <table id="table3">
       </table>
    </table>

我的模式找到了&lt;table id="table1"&gt;打开标签和table2的关闭标签之间的所有元素。

但我希望它匹配每个带有标签的表格元素。例如:table1的开闭标签,table2的开闭标签..

感谢您的回答。

【问题讨论】:

标签: java html regex


【解决方案1】:

我认为您的问题没有好的解决方案。 因为您无法使用正则表达式解析 HTML。

看看这个答案:

正则表达式是一种不够复杂的工具,无法理解 HTML 使用的结构。 HTML 不是正则语言,因此不能被正则表达式解析。正则表达式查询无法将 HTML 分解成有意义的部分。

https://stackoverflow.com/a/1732454/2801860

【讨论】:

    【解决方案2】:

    我觉得你的逻辑有点问题, 以下正则表达式将为您提供组中的每个打开表标签:

    \s*(<table.*>)
    

    虽然它不能匹配它的结束标签,你可以做的只是在表格子项中连接结束标签,而父母只需手动修复它

    【讨论】:

    • 您的模式在查找每个开始表标签时工作正常,但我不明白如何匹配关闭标签。你能举个例子解释一下吗?
    • 你不需要匹配结束标签,只需添加它们,因为它们是固定的,你也可以从字面上查找它们,正则表达式找不到匹配的结束如果有超过 1 个级别,则为每个表添加标签
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 2013-06-14
    相关资源
    最近更新 更多