我们有一种情况,我们有一个模板文件,如下所示
<?php
$tpl = '
<p>This is the header</p>
{if "IS VALID"}
<p>The value is valid
{if "IS NUMBER"}
and it is a number
{/if}
</p>
{/if}
';
$is_valid = false;
$is_number = true;
if ($is_valid){
$tpl = preg_replace('/\{if "IS VALID"\}(.*)\{\/if\}/sU','\1',$tpl);
}else{
$tpl = preg_replace('/\{if "IS VALID"\}(.*)\{\/if\}/sU','',$tpl);
}
if ($is_number){
$tpl = preg_replace('/\{if "IS NUMBER"\}(.*)\{\/if\}/sU','\1',$tpl);
}else{
$tpl = preg_replace('/\{if "IS NUMBER"\}(.*)\{\/if\}/sU','',$tpl);
}
echo $tpl;
?>
问题是第一个替换,一直替换到 FIRST {/if} 块。我们希望它替换匹配的{/if},即考虑到{if} 的嵌套。
实现这一目标的最有效方法是什么?
先感谢您!