2012-06-15 26 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