2017-12-27 114 views
0

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

这里是我的代码:

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> 

我的模式找到所有<table id="table1">之间的所有元素打开标签和table2的关闭标签。

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

感谢您的回答。

+0

解析HTML正则表达式被认为是不好的做法。您应该使用复杂的HTML解析器。请参阅[使用正则表达式来解析HTML:为什么不?](https://stackoverflow.com/questions/590747/using-regular-expressions-to-parse-html-why-not) – vanje

回答

0

我认为没有很好的解决方案来解决您的问题。 因为你不能用正则表达式解析HTML。

看看这个答案:

正则表达式是一种工具,是不够成熟的理解通过HTML所采用的结构。 HTML不是一种常规语言,因此不能用正则表达式进行分析。正则表达式查询不能将HTML分解为其有意义的部分。

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

0

我觉得你有一点逻辑问题, 以下的正则表达式会给你一个组中的每个开放表标签:

\s*(<table.*>) 

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

+0

您的模式正常工作,找到每个打开表格标签,但我不明白如何匹配关闭标签。你能用一个例子来解释吗? – Veysel

+0

您不需要匹配结束标签,只需将它们添加为固定的,也可以从字面上寻找它们,如果多于1个,则正则表达式无法为每个表找到匹配的结束标签关于电话号码 – tomersss2

+0

我知道了。感谢您的回答。 – Veysel

相关问题