删除所有的空标签,除了指定
问题描述:
下PHP正则表达式中删除所有的空标签:删除所有的空标签,除了指定
#<[^\/>]*>([\s]?)*<\/[^>]*>#u
我想删除不匹配的空标签:
<div style="clear:both"></div>
我想:
#^(<div style="clear:both"></div>)<[^\/>]*>([\s]?)*<\/[^>]*>#u
...但它没有工作。
如何添加否定?
答
假设它是格式良好的和没有缺少结束标记,这应该做的伎俩:
<(?!div\s+style=(?:"[^"]*?\bclear:\s*both\b[^"]*"|'[^']*?\bclear:\s*both\b[^']*')\s*>\s*</div>).*?>\s*</.*?>
确保使用不区分大小写的标志了。不过,我仍然会提出反对意见。
编辑:我没有测试过我的编辑,但我相当有信心,它有点彻底。
一个不会简单地用正则表达式解析/处理HTML。 – PeeHaa
你混淆了'^'。这意味着主题或线条的开始。你需要一个断言'(?!...)'而不是。 – mario
HTML不是一种常规语言。在某些情况下,结束标记*被允许*丢失*。换句话说,即使HTML文档缺少特定的结束标签,它也可以被认为是良好的。这使得搜索空标签变得更加困难。 –