替换DIV标签内的内容

时间:2012-01-04 11:33:12

标签: php regex preg-replace

我正在尝试用注释替换特定div标签(id =“dd-header”)中的内容。尝试了几种方法和正则表达式。这是我最近的尝试:

$html = preg_replace('/(<div\sid=\"dd\-header\">)[^<]+(<\/div>)/i', '<!-- Comment -->', $html);

无法让它发挥作用。我在这里做错了什么?

注意: div标签还有多个标签

要替换的示例代码

<div id="dd-header">
    <a id="logo-small" href="/" title="title"></a>
    <a href="http://url/">Link 1</a> | 
    <a href="javascript: (function () {window.location = 'http://url=' + encodeURIComponent(window.location.href);})()">Link 2</a>
    <!-- <a href="http://url">Image</a> | -->
    | <a href="url">Link 3</a></div>

3 个答案:

答案 0 :(得分:2)

$html = preg_replace('/(<div\sid="dd-header">)([^<]|<.+>.*<\/.+>)+(<\/div>)/i', '$1<!-- Comment -->$3', $html);

请参阅http://codepad.org/GpYkteh4

答案 1 :(得分:2)

虽然在简单的情况下你可以这样做,正如rabudde发布的那样,你不能用正则表达式做一般情况。它是正则表达式语言的一个限制,已在SO上广泛讨论。

当div包含子标签时,

rabudde的代码会失效。

正确的方法是使用(X)HTML解析器解析树,找到div节点,删除它的子节点,并替换为您喜欢的任何内容。

答案 2 :(得分:0)

只需使用DOMDocument。它会将其解析为一个易于遍历,按ID搜索和操作的DOM。

请参阅文档,从loadHTML开始:http://docs.php.net/manual/en/domdocument.loadhtml.php