Я заимствовал код из этой ссылки Шаблон регулярных выражений PHP - найдите все вхождения {{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 ($ соответствует)
Array
(
[0] => {{newsflash.font.width}}
[1] => newsflash
)
подстановка неправильная, потому что $ совпадения [1] - неправильный ключ.
.aclass{
font-width:;
}
Я подозреваю, что есть библиотеки, которые уже предоставляют эту функциональность и хотели бы узнать о них, но я все еще хочу знать, в чем ошибка с регулярным выражением.
Полный код с неисправным регулярным выражением приведен ниже.
<code>$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 "
";
return $ ini_array [$ match [1]];
}
$ inputFileVar = file_get_contents ($ inputFileName);
печать "
";
print_r($ini_array);
print "
";
печать "
";
print $inputFileVar;
print "
";
$ outFileVar = preg_replace_callback ('! \ {\ {(\ w +). + \. \ w + \} \}!', 'replace_value', $ inputFileVar);
печать "
";
print $outFileVar;
print "
";
печать "
";
print $matchesArray;
print "
";
Шаблон для сопоставления
.aclass{
font-width:{{newsflash.font.width}};
color:{{newsflash.font.color}}
}
Содержимое файла .ini
newsflash.font.width=8px
newsflash.font.color=red