我正在尝试模拟文档,我想通过搜索[%text%]
的文档并将其替换为$array['text']
或$text
来用动态文本替换文档的部分。我知道我可以使用str_replace("[%text%]", $array['text'], $page)
,但我希望查找[%(.*?)%]
的所有实例,并替换为$array[$1]
而不是$1
。我已尝试使用create_function($matches, $array)
,但它抱怨Missing argument 2 for {closure}()
。
$page = preg_replace('#\[%(.*?)%\]#is', $array["$1"], $page);
答案 0 :(得分:0)
首先执行preg_match并找到匹配的名称。然后使用每个找到的名称替换为该数组提供支持。然后使用preg_replace将数组作为第二个参数,从而用数组中的项替换名称。
答案 1 :(得分:0)
您可以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
}
}
}
答案 2 :(得分:0)
你可以使用preg_replace_callback。
<?php
$page = preg_replace_callback('#\[%(.*?)%\]#is',
function ($m){
GLOBAL $array;
return $array[$m[1]];
}
, $page);
?>