我们有一个模板文件,如下所示
<?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} s的嵌套。
实现这一目标的最有效方法是什么?
提前谢谢!
答案 0 :(得分:1)
首先提出此声明
if ($is_number){
$tpl = preg_replace('/\{if "IS NUMBER"\}(.*)\{\/if\}/sU','\1',$tpl);
}else{
$tpl = preg_replace('/\{if "IS NUMBER"\}(.*)\{\/if\}/sU','',$tpl);
}
你必须检查最深层次,以免被其他人覆盖
如果您删除“U”选项,则正则表达式将采用最新结束{/ if}:
$tpl = preg_replace('/\{if "IS VALID"\}(.*)\{\/if\}/s','\1',$tpl);
$ tp1将包含:
{if "IS VALID"}
<p>The value is valid
{if "IS NUMBER"}
and it is a number
{/if}
</p>
女巫要数学你的其他人的身份