2011-10-27 79 views
1

我試圖用PHP中的正則表達式替換模板HTML文件的一部分。到目前爲止,我有這個:用PHP替換一段html

$docText = OLD_TEXT; 
$text = NEW_TEXT; 
$docText = preg_replace('#<div id="information">[<div>(?R)</div>]*</div>#i x U', 
         $text, 
         $docText, 
         1); 

// Save file 

在它不做任何匹配的時刻。目標是讓它取代整個外部div,這意味着它需要知道所有其他s不是結束標記。

+0

你可以發佈一個$文本的例子嗎? –

+2

第一個問題在幾周內至少是相關的,但沒有人發佈愚蠢的鏈接。 - 所以,嗯。它必須是正則表達式嗎?或者允許更簡單的建議? - 無論如何,你的'?R'的語法,然後把它作爲字符類封裝是錯誤的。你是在哪裏找到那個東西的。 – mario

+0

簡單的選項很好。我最初嘗試DOMDocument,但之後沒有工作,我決定嘗試直接使用字符串。對不起,如果我應該發佈一個鏈接。這是我第一次發佈在StackOverflow上。 – DaBritishyankee

回答

2

我也不太清楚明白你想要什麼,但我想你想做到這一點:

$html = <<<HTML 
<html> 
    <head></head> 
    <body> 
     <div id="information"> 
      <div>Hi!</div> 
     </div> 
     <div id="otherInformation">Hi again!</div> 
    </body> 
</html> 
HTML; 

$replace = '<div id="newInformation">Bye!</div>'; 

$dom = new DOMDocument(); 
$dom->loadHTML($html); 

$tmp  = $dom->createTextNode('{newContent}'); 

$xpath = new DOMXPath($dom); 

$divInformation = $xpath->query('//div[@id="information"]'); 
$divInformation->item(0)->parentNode->replaceChild($tmp, $divInformation->item(0)); 

$newHTML = str_replace('{newContent}', $replace, $dom->saveHTML()); 
var_dump($newHTML); 

我能問爲什麼?

+0

我正在嘗試創建一個內容管理系統。到目前爲止,我有我的網站將標籤中的信息複製到textArea中。然後我把它發送到php頁面,用新信息替換信息區域。我覺得我可能會重新發明輪子,但這在我的腦海中是有道理的。 – DaBritishyankee

+0

那麼,如何持久?我認爲你使用數據庫?這就是爲什麼你在'textarea'中迴應東西,發佈並存儲它? – kasimir

+0

這是幾個月後,我剛剛檢查了這個帖子。經過很多工作,我終於得到了這個工作,感謝Fy-;然而,自那時以來,我已經完成了另一個網站,而我使用了MYSQL數據庫。非常容易!我通過替換模板中的一些文本爲每個動態頁面創建一個全新的文件(我問自己爲什麼現在),但MYSQL使它更容易做到這一點。噢,所有的結果都很好。學過的知識。 – DaBritishyankee