Regex: preg_replace_callback ile kullanılan hatalı sözdizimi?

2 Cevap php

Ben şablon fiies değerler uygulayarak bir araç uygulamak için bu linki http://stackoverflow.com/questions/959017/php-regex-templating-find-all-occurrences-of-var kod borç var. Bu preg_replace_callback () işlevini kullanır

adlandırma benim tercih edilen yöntem name1.name2.name3 = değeri yerine, name1_name2_name3 = değer, ama ben kullanıyorum regex bir sorun var gibi görünüyor.

Bu bir işe yaramaz.

template file

.aclass{
  font-width:{{newsflash.font.width}};
}

.ini values

newsflash.font.width=8px

regex used

'!\{\{(\w+).+\.\w+\}\}!'

output of print_r($matches)

Array
(
  [0] => {{newsflash.font.width}}
  [1] => newsflash
)

substitution is wrong because $matches[1] is wrong key key.

.aclass{
  font-width:;
}

Ben zaten bu işlevselliği sağlamak ve onlar hakkında bilmek isterdim kütüphaneler vardır sanıyorum, ama ben yine de regex ile arızayı bilmek istiyorum.

Hatalı regex ile fullcode altındadır.

$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>";

Eşleşmesi için Şablon

.aclass{
  font-width:{{newsflash.font.width}};
  color:{{newsflash.font.color}}
}

. Ini dosyası içeriği

newsflash.font.width=8px
newsflash.font.color=red

2 Cevap

karakter . \w parçası değildir; ve .+ (gruplaşmanın dışında Pars) (. joker) herhangi bir boş olmayan bir dize maç olacak. Bu yüzden, $matches[1]=newsflash doğrudur.

Eğer $matches[1] wnat Ne olmak istiyorsun? Bu özür, sorunuza net değildir.

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

Bu sıradanifade Şablonlarınız cezası eşleşen görünüyor.