删除所有的空标签,除了指定

问题描述:

下PHP正则表达式中删除所有的空标签:删除所有的空标签,除了指定

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

我想删除不匹配的空标签:

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

我想:

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

...但它没有工作。

如何添加否定?

+3

一个不会简单地用正则表达式解析/处理HTML。 – PeeHaa

+0

你混淆了'^'。这意味着主题或线条的开始。你需要一个断言'(?!...)'而不是。 – mario

+0

HTML不是一种常规语言。在某些情况下,结束标记*被允许*丢失*。换句话说,即使HTML文档缺少特定的结束标签,它也可以被认为是良好的。这使得搜索空标签变得更加困难。 –

假设它是格式良好的没有缺少结束标记,这应该做的伎俩:

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

确保使用不区分大小写的标志了。不过,我仍然会提出反对意见。

编辑:我没有测试过我的编辑,但我相当有信心,它有点彻底。

+0

我如何将它与我的正则表达式结合? – Maximus

+0

@jason,你介意提供一个它应该和不应该匹配的例子列表吗?我不确定你想要做什么,而不是匹配大多数空标签。 –

+1

如此复杂,那你是不是用正则表达式解析html – slier