【发布时间】:2021-03-13 18:42:24
【问题描述】:
我需要编写一个简单的 PHP 函数来用它们各自的数据替换 {{ }} 字符之间的文本。
示例:
String: "甚至还有奇怪的永恒 {{noun}} 可能 {{verb}}"
$data = ['noun' => 'bird', 'verb' => 'fly'];
结果:
“即使是奇怪的永恒,鸟也可能飞”
我几乎可以使用基于preg_replace_callback的以下代码
function compile($str,$data){
foreach ($data as $k => $v) {
$pattern = '/\b(?<!\-)(' . $k . ')\b(?!-)/i';
$str = preg_replace_callback($pattern, function($m) use($v){
return $v;
}, $str);
}
return $str;
}
但我似乎无法解释{{ }}。
结果如下:
“甚至在奇怪的永恒中{{bird}}可能{{fly}}”
如何调整正则表达式和/或代码以解决双花括号?
另外,在有人问我为什么要手动执行此操作而不是使用 PHP 本身或 Smarty 插件之前——安装插件的用例太窄,我不能使用 PHP 本身,因为输入字符串以来自数据库的原始文本形式出现。我需要使用存储在 PHP 数组中的数据来编译该原始文本。
【问题讨论】:
标签: php regex templating preg-replace-callback templating-engine