Я позаимствовал код из этой ссылки шаблон регулярного выражения PHP - найти все вхождения { {var}} для реализации средства применения значений к файлам шаблонов. Это использует функцию preg_replace_callback()
мой предпочтительный метод именования - это имя1.имя2.имя3=значение, а не имя1_имя2_имя3=значение, но регулярное выражение, которое я использую, похоже, имеет проблему.
Этот не работает.
файл шаблона
.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