用字符串变量替换preg_match中的引用

时间:2012-06-14 14:03:10

标签: php preg-replace

我正在尝试模拟文档,我想通过搜索[%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);

3 个答案:

答案 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);
?>