PHP中preg_replace中的动态变量

时间:2013-06-25 23:19:43

标签: php regex preg-replace

我有一个这样的文字模板:

$template = [FIRSTNAME] say hello to [NAME]

我有一个像

这样的用户数组
[user_name] => myname
[user_firstname] => myfirstname

我希望用preg_replace转换它,所以我尝试了这个:

$replacement = '$user[user_${1}]';
$result['texte'] = preg_replace('/[(.*)]/', {$replacement}, $result['texte']);

没有任何成功:(

1 个答案:

答案 0 :(得分:5)

/[(.*)]/无法逃脱[],如果确实存在,则基本上与所有内容相匹配。使用/\[(.*?)\]/。此外,您需要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)