<p><div class="vidwrapper"> lot of content with oder divs etc. </div><p>
如果以下div具有.vidwrapper类,则只应删除该段。
这甚至可能吗?知道这个正则表达式会是什么样子吗? 谢谢你的帮助。
答案 0 :(得分:1)
使用正则表达式执行此操作是一个坏主意,除非您知道在vidwrapper内部没有段落(或任何可能表面上被解释为段落的内容)。
如果你不这样做,那么为这样的事情写一个正则表达式将非常困难:
<p><div class="vidwrapper"> Hello there. <p>Wee.</p> Yoink. </div></p>
<p><div class="vidwrapper"> Hello there. <!-- <p>Wee.</p> --> Yoink. </div></p>
更简单(也更强大)的方法可能是用HTML解析器解析HTML,而是在DOM树上进行搜索。
答案 1 :(得分:1)
如果它是固定的,那么以下可能有效:
preg_replace('#<p>[^<]*<div[^>]+class="vidwrapper"[^>]*>.*?</p>#is', "")
对于匹配嵌套的html,你通常需要一个递归正则表达式,因此为什么像phpQuery或QueryPath这样的东西通常更简单:
$html = pq($html)->find("p div.vidwrapper")->parent()->remove()->html();
答案 2 :(得分:0)
如果您认为该脚本会导致问题,您也可以使用它。
#
\s*
<p\s*> \s* <div \s+ class \s* = \s* (["']) vidwrapper \1 \s* >
(?:
<script (?:\s+ (?:".*?"|'.*?'|[^>]*?)+)? \s*>
.*?
</script\s*>)
| .
)*?
</p\s*>
#xs