2012-07-24 68 views
0

我在找到多行HTML文件中的空HTML元素時遇到了問題。我的正則表達式是這樣的:Java正則表達式模式找到空的HTML/XML元素

Pattern pattern = Pattern.compile("<([a-zA-Z][a-zA-Z0-9]*)[^>]*?>[\\s]*?</\\1>"); 
Matcher matcher = pattern.matcher(htmlOut); 
while (matcher.find()) 
{ 
    htmlOut = matcher.replaceAll(""); 
    matcher = pattern.matcher(htmlOut); 
} 

問題是它不匹配任何空標籤。

僅供參考:同樣的正則表達式<([a-zA-Z][a-zA-Z0-9]*)[^>]*?>[\s]*?</\1>適用於崇高的文本!

任何方法?

+0

Obligatory正則表達式/ Html回覆:http://gackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – glenatron 2012-07-24 11:07:46

+3

@glenatron:刪除空標籤是在正則表達式的可能範圍之內。即使使用HTML。 – 2012-07-24 11:26:48

回答

3

該模式是可以的,但你錯了。在字符串上調用replaceAll(),而不是在匹配器對象上調用。

而且,無需遍歷的比賽 - 一個replaceAll是不夠的:

htmlOut = htmlOut.replaceAll("<([a-zA-Z][a-zA-Z0-9]*)[^>]*>\\s*</\\1>", ""); 

你不需要懶惰量詞,雖然 - 但是這將不會影響到比賽結果。

+0

感謝您的建議蒂姆! 不幸的是,這也不起作用。它根本找不到一個空標籤。沒有。我不明白爲什麼。我已經嘗試過只是matcher.find(),但它也返回false。 – kernel 2012-07-24 10:46:37

+0

它適用於我 - 正則表達式不允許在標記名稱之前和結束標記名稱之後留出任何空格。我不認爲這是問題?而且您確實替換了您的單行代碼發佈的完整代碼,對吧? – 2012-07-24 10:48:21

+0

你的意思是,如果我整齊地縮進'

',它將不會匹配其空的'​​'因爲前面的空白?編輯:我試過'htmlOut = htmlOut.replaceAll(「\\ s * <([a-zA-Z] [a-zA-Z0-9] *)[^>] *> \\ s * \ \ s *「,」「);'它也不起作用。是的,我用你的代替我的一堆代碼;) – kernel2012-07-24 10:51:20