简单的一个,我写了一个正则表达式,用html片段中的php常量查找和替换标签。我的解决方案,工作,只是感觉不对。怎么能改善呢?
preg_match_all('/\{CONSTANT_(.*)\}/', $final, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[1]); $i++) {
$final = str_replace($result[0][$i], constant($result[1][$i]),$final);
}
答案 0 :(得分:1)
function getConstant($matches)
{
return constant($matches[1]);
}
$final=preg_replace_callback(
'/\{CONSTANT_(.*?)\}/',
"getConstant",
$final);
注意我已.*
非贪婪.*?
,如果可能更长时间匹配,这将确保它不会吃掉}。您可以使用([^}]*)
或更好的([a-zA-Z0-9_]+)
答案 1 :(得分:0)
我总是反对重新发明轮子:如果你需要某种模板引擎(已经是php),请看Smarty。
答案 2 :(得分:0)
怎么样?
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit= -1 [, int &$count ]] )
答案 3 :(得分:0)
在正则表达式中使用“.*
”时要小心,因为它会贪婪地匹配它找到的所有内容。例如,在以下行中:
{CONSTANT_ONE} blah {CONSTANT_TWO}
上述正则表达式将捕获字符串“ONE} blah {CONSTANT_TWO
”
您可以使用字符类而不是。匹配除“}
”字符以外的任何内容:
/\{CONSTANT_([^}]*)\}/