次のようなテンプレートファイルがある状況があります
<?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} のネストを考慮します。
これを達成するための最も効率的な方法は何ですか?
前もって感謝します!