3

好的,所以我正在尝试做这样的事情:

preg_replace("/\{([a-zA-Z0-9_]+)\}/", $templateVariables[$1], $templateString);

现在我知道这是不可能的,但是我想知道是否有办法做到这一点,因为我尝试使用 create_function 但是,$templateVariables 是它所在函数的局部变量,所以我无法从 create_function 中访问 $templateVariables,所以我有点卡在这里。我宁愿不必找到匹配项找出替换它们的内容,然后再次找到它们进行替换,这看起来效率低下。那么无论如何我可以从匿名函数中获取局部变量,或者有没有人有任何好的建议。

谢谢。

4

3 回答 3

4

尝试这个:

$vars = array(
    "test" => "Merry Christmas",
);
$string = "test {test} test";
$string = preg_replace_callback("/\{([a-zA-Z0-9_]+)\}/", function($match) use ($vars) {
    return isset($vars[$match[1]]) ? $vars[$match[1]] : $match[0];
}, $string);
echo $string;

它应该输出:

测试圣诞快乐测试

你可以在这里看到一个工作示例http://codepad.viper-7.com/2ZNNYZ

于 2011-12-23T01:52:55.690 回答
-1

您实际上可以将 preg_replace 与 /e 修饰符一起使用:

preg_replace("/\{([a-zA-Z0-9_]+)\}/e", '$templateVariables[\'$1\']', $templateString)

但这可能不是这里最安全的方式......

于 2011-12-23T01:51:40.563 回答
-1

您需要使用 e 正则表达式修饰符:

preg_replace("/\{([a-zA-Z0-9_]+)\}/e", "\$templateVariables['\\1']", $templateString);
于 2011-12-23T01:54:00.867 回答