質問

このリンクからコードを借りました 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]*)\}\};?!

この正規表現は、テンプレートとうまく一致しているようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top