2013-01-13 72 views
0

下PHP正則表達式中刪除所有的空標籤:刪除所有的空標籤,除了指定

#<[^\/>]*>([\s]?)*<\/[^>]*>#u 

我想刪除不匹配的空標籤:

<div style="clear:both"></div> 

我想:

#^(<div style="clear:both"></div>)<[^\/>]*>([\s]?)*<\/[^>]*>#u 

...但它沒有工作。

如何添加否定?

+3

一個不會簡單地用正則表達式解析/處理HTML。 – PeeHaa

+0

你混淆了'^'。這意味着主題或線條的開始。你需要一個斷言'(?!...)'而不是。 – mario

+0

HTML不是一種常規語言。在某些情況下,結束標記*被允許*丟失*。換句話說,即使HTML文檔缺少特定的結束標籤,它也可以被認爲是良好的。這使得搜索空標籤變得更加困難。 –

回答

3

假設它是格式良好的沒有缺少結束標記,這應該做的伎倆:

<(?!div\s+style=(?:"[^"]*?\bclear:\s*both\b[^"]*"|'[^']*?\bclear:\s*both\b[^']*')\s*>\s*</div>).*?>\s*</.*?> 

確保使用不區分大小寫的標誌了。不過,我仍然會提出反對意見。

編輯:我沒有測試過我的編輯,但我相當有信心,它有點徹底。

+0

我如何將它與我的正則表達式結合? – Maximus

+0

@jason,你介意提供一個它應該和不應該匹配的例子列表嗎?我不確定你想要做什麼,而不是匹配大多數空標籤。 –

+1

如此複雜,那你是不是用正則表達式解析html – slier