Php 用字符串变量替换preg_match中的反向引用
我正在尝试为文档创建模板,我想通过搜索文档中的Php 用字符串变量替换preg_match中的反向引用,php,preg-replace,Php,Preg Replace,我正在尝试为文档创建模板,我想通过搜索文档中的[%text%]并将其替换为$array['text']或$text来用动态文本替换文档的部分。我知道我可以使用str_replace([%text%]”、$array['text']、$page),但我想找到[%(.*?%])的所有实例,并用$array[$1]替换为$1。我尝试使用create_函数($matches,$array),但它抱怨缺少{closure}()的参数2 $page = preg_replace('#\[%(.*?)%\]#
[%text%]
并将其替换为$array['text']
或$text
来用动态文本替换文档的部分。我知道我可以使用str_replace([%text%]”、$array['text']、$page)
,但我想找到[%(.*?%])
的所有实例,并用$array[$1]
替换为$1
。我尝试使用create_函数($matches,$array)
,但它抱怨缺少{closure}()的参数2
$page = preg_replace('#\[%(.*?)%\]#is', $array["$1"], $page);
首先进行preg_匹配并找到匹配的名称。然后为每个找到的名称替换数组。然后使用preg_replace with the array作为第二个参数,从而用数组中的项目替换名称。您可以
preg_match_all(“#[%(.*?%]]#is',$page,$matches)代码>然后
if(count($matches == 2))
{
$key = 0;
foreach(array_unique($matches[0]) as $val)
{
if(isset($array[$key]))
{
$page = str_replace($val, $array[$key++], $page);
}
else
{
break; // more matches than array elements
}
}
}
您可以使用preg_replace_回调来执行此操作
<?php
$page = preg_replace_callback('#\[%(.*?)%\]#is',
function ($m){
GLOBAL $array;
return $array[$m[1]];
}
, $page);
?>
create\u函数这两个参数都是字符串,您传递的是$array,是$array是字符串吗?这个解决方案对我来说非常有效,但我不得不稍微调整一下$page=str_replace(“[%.”$val.%]”,$array[$key],$page);我去掉了裂口;为了防止在$array[$key]未设置时结束循环,它有一个错误。$key++
应该在str\u replace
行中。如果您将foreach(array_unique($matches[1])更改为$val)
为foreach(array_unique($matches[0])更改为$val)
它将按照您的预期运行。我来编辑一下。