Php 将变量字符串的简单preg_替换为不起作用的值

Php 将变量字符串的简单preg_替换为不起作用的值,php,regex,preg-replace,Php,Regex,Preg Replace,我只是想让{string}变成$string变量的值 例如,考虑到我有以下变量: $car = 'Audi'; $speed = 'Fast'; $sentence = "The {car} goes {speed}"; 我希望输出:奥迪跑得很快 以下是我的代码,它不起作用: $setting['leads_low_subject'] = '{dealer_name} has {leads_left} leads left!'; $dealer_name = 'My Test Dealer';

我只是想让
{string}
变成
$string
变量的值

例如,考虑到我有以下变量:

$car = 'Audi';
$speed = 'Fast';
$sentence = "The {car} goes {speed}";
我希望输出:
奥迪跑得很快

以下是我的代码,它不起作用:

$setting['leads_low_subject'] = '{dealer_name} has {leads_left} leads left!';
$dealer_name = 'My Test Dealer';
$leads_left = 6;

$subject = preg_replace('/\{([a-z]+)\}/e', "$$1", $setting['leads_low_subject']);

echo $setting['leads_low_subject'].'<br />';
echo "$subject";
当它应该回响时:

{dealer_name} has {leads_left} leads left!
My Test Dealer has 6 leads left!

为什么它不能正常工作?

我认为最快的方法是使用strtr()


我看到的最快的方法是使用strtr():


看起来你在找一个穷人的模板引擎。您可以使用
preg\u replace\u callback()


看起来你在找一个穷人的模板引擎。您可以使用
preg\u replace\u callback()


{dealer\u name}
有一个下划线,但是如果您匹配
[a-z]+
,可以尝试使用
[a-z]+
\w+
,其中
\w
[a-Za-z0-9.
的缩写,str u替换将是一个更好的主意。我知道它非常简单。谢谢你,乔尼。dagon,我知道存在安全漏洞,但$SETING变量内容不可公开访问,并且永远不会包含恶意字符串。@scarhand
e
修饰符已被弃用。使用
preg\u replace\u callback()
作为替换。
{dealer\u name}
有下划线,但如果您匹配
[a-z]+
,可以尝试使用
[a-z]+
\w+
其中
\w
[a-Za-z0-9\/code>的简写,stru replace将是一个更好的主意,因为我知道它非常简单。谢谢你,乔尼。dagon,我知道存在安全漏洞,但$SETING变量内容不可公开访问,并且永远不会包含恶意字符串。@scarhand
e
修饰符已被弃用。使用
preg\u replace\u callback()
作为替换。
{dealer_name} has {leads_left} leads left!
My Test Dealer has 6 leads left!
$trans = array( '{car}'   => 'Audi',
                '{speed}' => 'Fast');

$result = strtr($sentence, $trans);
$tpl_vars = array(
    'car' => 'Ford',
    'speed' => 'fast'
);


$tpl = 'The {car} goes {speed}';

echo preg_replace_callback('/\{(.*?)\}/', function($match) use ($tpl_vars) {
    return $tpl_vars[$match[1]];
}, $tpl);