2012-01-04 147 views
0

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

$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> 
+0

您是否特别需要使用PHP来做到这一点,或者您是否愿意使用Javascript等客户端解决方案? – 2012-01-04 11:35:06

+0

你可以发布你试图操纵的HTML吗? – 2012-01-04 11:35:15

+0

[How to parse and process HTML with PHP?](http://stackoverflow.com/questions/3577641/how-to-parse-and-process-html-with-php) – hakre 2012-01-04 11:37:36

回答

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

http://codepad.org/GpYkteh4

+0

咦?在这里它失败了:http://codepad.org/dNY5nNEU – hakre 2012-01-04 11:39:37

+0

@hakre:是的,这与'preg_replace'很难,以及如果标签没有正确关闭会怎么样...但我已经修改了一下 – rabudde 2012-01-04 11:46:30

+0

@rabudde It工作。万分感谢 ! – Ankit 2012-01-04 12:17:41

2

而在简单的情况下,你可以做到这一点,因为张贴rabudde,你不能用正则表达式做的一般情况。它是正则表达式语言的一个限制,并且已经在SO上进行了广泛的讨论。

当div包含子标签时,rabudde的代码会失败。

正确的做法是用(X)HTML解析器解析树,找到div节点,删除它的子节点,然后替换为任何你喜欢的。

+0

我修改了一下我的正则表达式,但是肯定的是,对于复杂的内容你最好使用DOM解析器 – rabudde 2012-01-04 11:47:03