检索所有出现的部分字符串

时间:2012-06-15 12:03:24

标签: php regex

在我的字符串中(实际上是单页的HTML)我有一些我想要访问的标签,并用相关内容替换。

例如:

<p>[@intro_text]</p>

将成为:

<p>introduction text!</p>

这对于str_replace来说非常简单,但我还有一系列标签,如下所示:

[@snippet_searchbox]
[@snippet_contactbox]

我需要在html中找到所有这些标签 [@ snippet _ ?????]

我基本上只想得到一个包含所有标签名称的数组。从中我可以很容易地找到它应该替换的内容。

例如:

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

最好的方法是什么?我一直在玩 preg_match ,但每当我尝试使用正则表达式时我都会睁大眼睛,尽管我确信这很简单。

任何建议都会感激不尽,如果有人可以帮助我使用正则表达式代码我应该使用正则表达式。谢谢!

3 个答案:

答案 0 :(得分: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 :(得分: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);

答案 2 :(得分:1)

为什么不简单地使用str_replace?

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