我从这个链接借用了代码PHP regex templating - 找到所有出现的 {{var}}以实现将值应用于模板文件的方法。这使用 preg_replace_callback() 函数
我首选的命名方法是 name1.name2.name3=value,而不是 name1_name2_name3=value,但我使用的正则表达式似乎有问题。
这个不行
模板文件
.aclass{
font-width:{{newsflash.font.width}};
}
.ini 值
newsflash.font.width=8px
使用的正则表达式
'!\{\{(\w+).+\.\w+\}\}!'
print_r($matches) 的输出
Array
(
[0] => {{newsflash.font.width}}
[1] => newsflash
)
替换是错误的,因为 $matches[1] 是错误的键键。
.aclass{
font-width:;
}
我怀疑有些库已经提供了这个功能并且很想知道它们,但我仍然想知道正则表达式的错误。
带有错误正则表达式的完整代码如下。
$inputFileName = 'templateVars.css';
$outputFileName = 'templateVals.css';
$varsFileName = 'variables.ini';
$ini_array = parse_ini_file($varsFileName);
$matchesArray = array();
function replace_value($matches) {
global $ini_array;
global $matchesArray;
print "<pre>";
print_r($matches);
print "</pre>";
return $ini_array[$matches[1]];
}
$inputFileVar = file_get_contents($inputFileName);
print "<pre>";
print_r($ini_array);
print "</pre>";
print "<pre>";
print $inputFileVar;
print "</pre>";
$outFileVar = preg_replace_callback('!\{\{(\w+).+\.\w+\}\}!', 'replace_value', $inputFileVar);
print "<pre>";
print $outFileVar;
print "</pre>";
print "<pre>";
print $matchesArray;
print "</pre>";
要匹配的模板
.aclass{
font-width:{{newsflash.font.width}};
color:{{newsflash.font.color}}
}
.ini 文件的内容
newsflash.font.width=8px
newsflash.font.color=red