ビューでクリーンでシンプルな構文を使用できるように、PHP で疑似変数パーサーを構築しており、if ステートメント用のエンジンを実装しています。ここで、ネストされた if ステートメントを使用できるようにしたいと考えています。私が考えた最も単純で最も洗練された解決策は、identation をブロックのマーカーとして使用することでした。
したがって、これは基本的に私がビューで探しているレイアウトです:
{if x is empty}
{if y is array}
Hello World
{endif}
{endif}
スクリプトは最初の if 文を見つけて、同じ深さの endif と一致させます。true と評価された場合、内側のブロックも解析されます。
現在、次のコードで深さを使用する正規表現の設定に問題があります。
preg_match_all('|([\t ]?){if (.+?) is (.+?)}(.+?){endif}|s', $template, $match);
基本的に、ある種の変数を使用する([\t ]?)
前に の最初の一致を配置し、 と同じ深さで一致がない場合、ステートメントが完了しないようにします。{endif}
{endif}
{if ...}
完成させるのを手伝ってくれませんか?