Php 检索部分字符串的所有匹配项

Php 检索部分字符串的所有匹配项,php,regex,Php,Regex,在我的字符串(实际上是单个页面的HTML)中,我有许多标记,我想访问这些标记并用相关内容替换它们 例如: 我需要在html中找到这些标签的所有匹配项 我基本上只想得到一个包含所有标记名的数组。从中我可以很容易地找到它应该被替换的内容 例如: 最好的方法是什么?我一直在玩,但每当我尝试正则表达式时,我都会产生斗鸡眼,尽管我确信这很简单 任何建议都将不胜感激,如果有人可以帮助我使用我应该使用的regex代码,那么就可以使用regex。谢谢 不要为这些标识符发明自己的语法,而是使用常规(X)HTML属

在我的字符串(实际上是单个页面的HTML)中,我有许多标记,我想访问这些标记并用相关内容替换它们

例如:

我需要在html中找到这些标签的所有匹配项

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

例如:

最好的方法是什么?我一直在玩,但每当我尝试正则表达式时,我都会产生斗鸡眼,尽管我确信这很简单


任何建议都将不胜感激,如果有人可以帮助我使用我应该使用的regex代码,那么就可以使用regex。谢谢

不要为这些标识符发明自己的语法,而是使用常规(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>

… … …

然后使用和查找并替换/修改它们。有很多关于StackOverflow的例子说明了如何做到这一点。

您可以使用
str\u replace()

$tags=数组(
“[@intro_text]”=>“简介文本!”,
“[@snippet\u searchbox]”=>“一些文本”,
/*这里有更多的项目*/
);
$html=str_replace(数组_键($tags),数组_值($tags),$html);

为什么不简单地使用str\u replace

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

如何将文本映射到代码段?是否最适合您的情况(如果我没有弄错的话)…您的html是否非常干净,也就是说没有奇怪的换行符?我已经看过preg_replace_callback(),但我仍然需要知道要使用的正则表达式。基本上,我只想得到我页面上所有代码片段的数组,例如[0]->snippet\u searchbox,[1]->snippet\u contactbox。你在一周多的时间里没有找到。你能指出为什么没有一个答案能解决你的问题吗。谢谢。哇,我不知道str_replace可以处理数组这一简单事实;)我不能使用str_replace,因为我不能手动引用代码段。我需要检索snippet标记的全名,这样我就可以找到相关的内容来替换它。这需要非常动态,值得假设我的代码不知道代码段的名称,只是它们将以[@snippet\开头。我已经更新了我的帖子,希望能让这更清楚。我不能使用str\ u替换,因为这需要动态。我的代码不知道页面上的代码段是什么,只是它们都将以[@snippet\开头_
Array
(
    [0] => snippet_searchbox
    [1] => snippet_contactbox
    [2] => snippet_somethingelse
)
<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>
$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);
str_replace("[@intro_text]", $new_content_of_intro_text, $html_file);