2017-12-27 113 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

相關問題