正则表达式:preg_replace_callback使用错误的语法?

时间:2009-09-12 20:02:55

标签: php regex templating preg-replace-callback

我借用了此链接PHP regex templating - find all occurrences of {{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
)

替换错误,因为$ 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

2 个答案:

答案 0 :(得分:1)

字符.不属于\w;并且您的.+(在分组的parens之外)将匹配任何非空字符串(.是通配符)。因此,$matches[1]=newsflash是正确的。

你认为$matches[1]是什么?对不起,您的问题并不清楚。

答案 1 :(得分:0)

!\{\{(\w[\.\w]*)\}\};?!

此正则表达式似乎与您的模板匹配得很好。