0

HTML:

<!--a lot of HTML before-->
<div class="quoteheader">
  <div class="topslice_quote"><a href="htsomelink">Some text</a></div>
</div>
<blockquote class="bbc_standard_quote">Some text<br />
</blockquote>
<div class="quotefooter">
  <div class="botslice_quote"></div>
</div>
<br />
<!--a lot of HTML after-->

我需要:删除 div.quoteheader 和 first <br/>after 之间的所有内容,因此结果应如下所示:

<!--a lot of HTML before-->
<!--a lot of HTML after-->

我试过了:

$message = preg_replace('/<div\sclass=\"quoteheader\">[^<]+<\/div>/i', '', $string)
4

4 回答 4

0

使用 XML/HTML/DOM 解析器比使用正则表达式更好。SimpleXML非常简单。

您只需加载带有 SimpleXML 或其他一些 HTML/XML 解析器的 HTML,然后使用 xpath 查找您要查找的节点和/或注释,然后删除它们。

于 2013-02-08T17:44:30.517 回答
0

另一种选择...如果您可以使用注释分隔代码,如下所示:

<!--code-->
<div> .. </div>
<!--/code-->

您可以删除这之间的所有内容:

$newstr = preg_replace('/<!--code-->.*?<!--\/code-->/is', '', $htmlstring);
于 2013-02-08T17:55:20.293 回答
0

我建议使用 HTML 创建一个DomDocument对象,然后使用RemoveChild

于 2013-02-08T17:47:57.723 回答
0
preg_replace('/(\<div\ class="quoteheader"\>)(.+)(<br \/>)/si', '', $string)
于 2013-02-08T17:59:12.177 回答