このリンク 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