2012-06-15 59 views
1

在我的字符串(實際上是單個頁面的HTML)中,我有許多我想訪問的標記並用相關內容替換。檢索所有出現的部分字符串

如:

<p>[@intro_text]</p> 

將變爲:

<p>introduction text!</p> 

這一切都非常簡單與str_replace做的,但我也有類似下面的一系列標籤:

[@snippet_searchbox] 
[@snippet_contactbox] 

我需要查找所有這些標籤的出現[@snippet _ ?????]在html中。

我基本上只想結束所有標籤名稱的數組。從這我可以很容易地找到它應該被替換的內容。

如:

Array 
(
    [0] => snippet_searchbox 
    [1] => snippet_contactbox 
    [2] => snippet_somethingelse 
) 

什麼是做到這一點的最好方法是什麼?我一直在玩preg_match但是,當我嘗試使用正則表達式時,我得到了對立面,儘管我確信這很簡單。

任何建議將不勝感激,如果它應該與正則表達式,如果有人可以幫助我的正則表達式代碼我應該用戶。謝謝!

+0

你如何將你的文本映射到你的片段? – afuzzyllama

+0

['preg_replace_callback()'](http://gr2.php.net/manual/en/function.preg-replace-callback.php)是最適合你的情況的(如果我正確地得到它的話).. – Leri

+0

是你的html很乾淨,這意味着沒有奇怪的換行符? – Sliq

回答

1

而是自己發明的這些標識符的語法,使用普通的(X)HTML屬性:

<html> 
    … 
    <p id="intro_text"></p> 
    …  
    <div id="searchbox"></div> 
    … 
    <div id="contactbox"></div> 
    … 
</html> 

或命名空間的元素:

<html> 
    … 
    <p tpl:id="intro_text"></p> 
    …  
    <tpl:snippet id="searchbox"/> 
    … 
    <tpl:snippet id="contactbox"/> 
    … 
</html> 

然後使用DOMXPath查找和替換/修改它們。在StackOverflow上有很多關於如何執行此操作的示例。

1

您可以使用str_replace()

$tags = array(
'[@intro_text]'  => 'introduction text!', 
'[@snippet_searchbox]' => '<div>some text</div>', 
/* more items here */ 
); 

$html = str_replace(array_keys($tags), array_values($tags), $html); 
+0

哇,不知道str_replace可以處理ARRAYs的簡單事實;) – Sliq

+0

我無法使用str_replace,因爲我無法手動引用片段。我需要檢索代碼片段標籤的全名,以便我可以找到相關內容來替換它。這需要相當動態,值得假設我的代碼不知道片段的名稱,只是他們將以[@snippet_ – chapmanio

1

爲什麼不直接使用str_replace函數?

str_replace("[@intro_text]", $new_content_of_intro_text, $html_file); 
+0

我已更新我的帖子以希望更清晰地開始。我不能使用str_replace,因爲這需要動態。我的代碼不知道頁面上有哪些代碼片段,只是它們都以[@snippet_ – chapmanio