如何在{{}}之间preg_replace内容

时间:2015-06-04 17:20:19

标签: php preg-replace

以下是我替换{{ }}之间内容的代码。例如,我使用{{example}}从db加载自定义文本以替换html输出中的内容。这很好但有时它没有,我不确定为什么。如果我使用两个{{one}}和{{two}},它可能在同一行。所以我想也许我在做preg_replace错了。

function translate($tagname){
   global $$tagname;
   return $$tagname;
}

function replaceTags($body){
   $body = preg_replace('!{{(.*?)}}!Uei', "''.translate('$1').''", $body);
   return $body;
}

1 个答案:

答案 0 :(得分:3)

你应该删除U修饰符,因为它会使你的不合理(.*?)变得贪婪,而这不是你想要的。

此外,在PHP 5.5.0中不推荐使用e修饰符。请改用preg_replace_callback

$firstName = 'Jane';
$lastName = 'Doe';

function translate($tagname){
    global $$tagname;
    return $$tagname;
}

function translateMatch($matches) {
    return translate($matches[1]);
}

function replaceTags($body){
    $body = preg_replace_callback('!{{(.*?)}}!i', 'translateMatch', $body);
    return $body;
}

echo replaceTags("Hello, {{firstName}} {{lastName}}!"), PHP_EOL;

输出:

Hello, Jane Doe!