2012-01-04 194 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