0

我正在尝试模板化文档,我想通过搜索文档[%text%]并将其替换为动态文本来替换文档的部分$array['text']or $text。我知道我可以使用str_replace("[%text%]", $array['text'], $page),但我想查找 的所有实例[%(.*?)%]并替换为 with$array[$1]而不是$1。我试过使用create_function($matches, $array),但它抱怨Missing argument 2 for {closure}().

$page = preg_replace('#\[%(.*?)%\]#is', $array["$1"], $page);
4

3 回答 3

0

首先做一个 preg_match 并找到匹配的名称。然后用替换的每个找到的名称创建数组。然后使用带有数组的 preg_replace 作为第二个参数,从而用数组中的项目替换名称。

于 2012-06-14T14:18:19.057 回答
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
    }
  }
}
于 2012-06-14T14:19:31.660 回答
0

您可以使用 preg_replace_callback 来完成。

<?php
$page = preg_replace_callback('#\[%(.*?)%\]#is',
  function ($m){
    GLOBAL $array;
    return $array[$m[1]];
  }
, $page);
?>
于 2012-06-14T14:53:45.983 回答