preg_replace - 数组中的随机单词

时间:2012-04-28 12:34:51

标签: php regex templates preg-replace

我有以下代码。

<?php
$user['username'] = 'Bastian';

$template = 'Hello {user:username}';
$template = preg_replace('/\{user\:([a-zA-Z0-9]+)\}/', $user['\1'], $template);
echo $template;

// Output: 
// Notice: Undefined index: \1 in C:\xampp\htdocs\test.php on line 5
// Hello

我想,你知道我会做什么(我希望你知道)。 我尝试替换$ user ['$ 1'],$ user [“$ 1”]或$ user [$ 1],Nothing Works!

我希望你能帮助我=) 提前谢谢!

1 个答案:

答案 0 :(得分:2)

您需要使用preg_replace_callback() - preg_replace()的替换是一个字符串,因此您无法在那里使用PHP代码。不,/e修饰符不是解决方案,因为eval是邪恶的。

这是一个例子(它需要PHP 5.3,但你应该使用最新的版本!):

$user['username'] = 'FooBar';
$template = 'Hello {user:username}';
echo preg_replace_callback('/\{user\:([a-zA-Z0-9]+)\}/', function($m) use ($user) {
    return $user[$m[1]];
}, $template);

如果您 使用旧的PHP版本,您可以这样做。由于使用了全局变量,它更加丑陋:

function replace_user($m) {
    global $user;
    return $user[$m[1]];
}
echo preg_replace_callback('/\{user\:([a-zA-Z0-9]+)\}/', 'replace_user', $template);

但是,考虑使用模板引擎,例如h2o,而不是自己实施。