PHP中preg_replace中的动态变量

PHP中preg_replace中的动态变量,php,regex,preg-replace,Php,Regex,Preg Replace,我有这样一个文本模板: $template = [FIRSTNAME] say hello to [NAME] 我有一个用户数组,比如 [user_name] => myname [user_firstname] => myfirstname 我想用preg\u replace对其进行转换,因此我尝试了以下方法: $replacement = '$user[user_${1}]'; $result['texte'] = preg_replace('/[(.*)]/', {$rep

我有这样一个文本模板:

$template = [FIRSTNAME] say hello to [NAME]
我有一个用户数组,比如

[user_name] => myname
[user_firstname] => myfirstname
我想用
preg\u replace
对其进行转换,因此我尝试了以下方法:

$replacement = '$user[user_${1}]';
$result['texte'] = preg_replace('/[(.*)]/', {$replacement}, $result['texte']);
没有任何成功:(

/[(.*)]/
不会逃逸
[
]
,如果逃逸,基本上会匹配所有内容。使用
/\[(.*)\]/
。此外,需要
strotlower
匹配的内部值

$template = "[FIRSTNAME] say hello to [NAME]";
$replacements = array(
   'user_name' => 'myname',
   'user_firstname' => 'myfirstname',
);

$result['texte'] = preg_replace_callback('/\[(.*?)\]/', function ($match)
    use ($replacements) {
    return $replacements["user_" . strtolower($match[1])];
}, $template)
/[(.*)]/
不会转义
[
]
,如果转义,则基本上会匹配所有内容。使用
/\[(.*)\]/
。此外,还需要
strtolower
匹配的内部值

$template = "[FIRSTNAME] say hello to [NAME]";
$replacements = array(
   'user_name' => 'myname',
   'user_firstname' => 'myfirstname',
);

$result['texte'] = preg_replace_callback('/\[(.*?)\]/', function ($match)
    use ($replacements) {
    return $replacements["user_" . strtolower($match[1])];
}, $template)

查看
preg\u replace\u callback()
此外,您还需要转义正则表达式中的方括号。否则,您将只匹配
中的一个字符(
*
。查看
preg\u replace\u callback()
此外,您还需要转义正则表达式中的方括号。否则,您将只匹配
中的一个字符(
*
。效果非常好!感谢有关正则表达式和[]的提示!感谢有关正则表达式和[]的提示