如何使用RegEx删除html元素及其内容

时间:2009-07-11 23:31:33

标签: php regex

我有一个div id喜欢从输出中删除,看起来像

<div id="ithis" class="cthis">Content here which includes other elements etc..) </div>

如何使用PHP和regex删除此div及其中的所有内容?

谢谢。

3 个答案:

答案 0 :(得分:13)

简单的答案是你没有。您可以使用PHP的许多HTML解析器之一。正则表达式是一种操作HTML的片状且容易出错的方式。

据说你可以这样做:

$html = preg_replace('!<div\s+id="ithis"\s+class="cthis">.*?</div>!is', '', $html);

许多事情可能会出错。例如,如果包含div:

<div id="ithis" class="cthis">Content here which <div>includes</div> other elements etc..) </div>

你最终会得到:

 other elements etc..) </div>

因为正则表达式将停在第一个</div>。并且没有什么可以用来一致地解决这个问题(使用正则表达式)。

使用解析器完成它看起来更像是这样:

$doc = new DOMDocument();
$doc->loadHTML($html);
$element = $doc->getElementById('ithis');
$element->parentNode->removeChild($element);
$html = $doc->saveHTML();

答案 1 :(得分:1)

我不了解PHP,但您可以不用任何内容替换/<id.*?<\/id[^>]*>/

答案 2 :(得分:0)

PHP是服务器端,输出来自服务器。你能不能输出它吗?或者你想隐藏它?如果是这样,请在样式表中说出#ithis {display:none}

如果字符串是从PHP中的某个函数返回的,你还没有编写并且你不想使用该代码,你必须编写一个非常困难的正则表达式来解释嵌套的div,在输出等我建议使用一些解析器(也许这个Zend Framework component)来帮助你。我已经用了几次类似的东西。虽然如果你根本不熟悉ZF,你可能想尝试其他的东西。