正規表現:preg_replace_callbackで誤った構文が使用されていますか?
-
06-07-2019 - |
質問
このリンクからコードを借りました 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($ 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
解決
文字。
は \ w
の一部ではありません。 。+
(グループ化括弧の外側)は空でない文字列と一致します(。
はワイルドカードです)。したがって、 $ matches [1] = newsflash
は正しいです。
$ matches [1]
はどうなりますか?これは質問から明らかではありません。申し訳ありません。
他のヒント
!\{\{(\w[\.\w]*)\}\};?!
この正規表現は、テンプレートとうまく一致しているようです。
所属していません StackOverflow