0

次のようなテンプレートファイルがある状況があります

<?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} のネストを考慮します。

これを達成するための最も効率的な方法は何ですか?

前もって感謝します!

4

1 に答える 1