2012-11-13 95 views
0

我有一種情況,我認爲我可能不得不使用正則表達式來改變html標記內容或基於class屬性的src。用php正則表達式替換html的標記

要文檔我將解析將要麼很好地形成的HTML,部分HTML或PHP文件。

EG我需要改變/填充這些變量與內部內容:fileX.php

<?php 
echo <<<_END 
<div class="identifyingClass1"></div> 
<div class="identifyingClass2"><span>holding content</span></div> 
<img src='http://source.com/to/change' class='identifyingClass3' alt='descrip'/> 
_END; 

所得fileX.php

<?php 
echo <<<_END 
<div class="identifyingClass1">New content jsd soisvkbsdv</div> 
<div class="identifyingClass2">More new content</div> 
<img src='new/source.tiff' class='identifyingClass3' alt='descrip'/> 
_END; 

的HTML可能是完整的,可以通過PHP分開,就像是,在一個hereDOC裏面...

實現這個只是使用正則表達式或有人看到或使用過類的東西的最好方法是什麼?

+1

您可能會從[關於此主題的規範答案]中受益(http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 )。 – rdlowrey

+1

-1由於研究工作量不足 - 有幾百個(??)的SO問題幾乎與此相同? – djechlin

+0

非DOMDocuments聲明,如果他們可以處理解析php文件雖然,乾淨的HTML罰款,但不是PHP模板 – John

回答

2

Regex is evil這種情況。更好地處理生成的html。這是你如何做到的。

啓用output buffering。在ob_start功能添加自己的回調。在處理程序中處理生成的html與DOMDocument。就像這樣,

function my_handler($contents){ 
    $doc = DOMDocument::loadHTML ($contents); 
    // change your document here and return it later 
    return $doc->saveHTML(); 
} 
ob_start('my_handler'); 
+0

我編輯了原始的q,將DOMdocument或任何其他解析器能夠處理? – John

+0

如果您輸出html片段,它將被追加到輸出緩衝區。在http請求完成之後,您想要呈現完整的html頁面,不是嗎?這個回調就在那時發生。所以你可以寫任何html片段。它不是一個問題,只要這些是豬油html文檔的一部分。如果它的html文件不合法,它也會起作用。但會產生很多警告。 –

+0

不,我需要能夠編輯其自身的實際php文件,打開php文件但不運行它,chnage一些html的內容,然後將更改保存到php文件。 – John

0

如前所述,RegEx不建議用於做這種事情。 Look at this優秀的答案。我個人最喜歡的是SimleDom,它提供了類似於jQuery的語法,並且使得在PHP中使用HTML實際上很愉快;)。

+0

我編輯了原始的q,DOMdocument或任何其他解析器能夠處理? – John

+0

'<?php include「simple_html_dom.php」; $ html = file_get_html('youfile.php'); echo $ html-> innertext; ' 難道你不能這樣做嗎? –