【发布时间】:2018-12-20 17:47:28
【问题描述】:
我有以下代码行:
$message = preg_replace('/\{\{([a-zA-Z_-]+)\}\}/e', "$$1", $body);
这会将两个大括号括起来的单词替换为同名变量。即 {{username}} 被 $username 替换。
我正在尝试将其转换为使用 preg_replace_callback。到目前为止,这是我基于谷歌搜索的代码,但我不确定我在做什么! error_log 输出显示包含大括号的变量名称。
$message = preg_replace_callback(
"/\{\{([a-zA-Z_-]+)\}\}/",
function($match){
error_log($match[0]);
return $$match[0];
},
$body
);
非常感谢任何帮助。
【问题讨论】:
-
将
$match[1]用于包含您的变量名称的第一个捕获组。 -
附带说明,这个
error_log($match[0])似乎是用来调试的。你可以学习使用 xdebug (xdebug.org)。调试起来比这简单得多。 -
我认为这里的主要问题是您引用的变量不会存在于函数的范围内。即,如果你有
{{username}},那么$username在函数中是未定义的。您可以将它们全部放在一个关联数组中,然后通过use语句使该数组可用。这样,您实际上也建立了一个允许变量的白名单,所以像{{this}}这样的东西不会被利用。
标签: php regex preg-replace preg-replace-callback