Ben manzaralı temiz ve basit bir sözdizimi izin PHP bir sözde değişkeni ayrıştırıcı inşa ediyorum ve bir motor hayata varsa-tablolar. Şimdi iç içe kullanmak mümkün olmasını istiyorsanız-tablolar ve ben düşündüm basit, en zarif çözüm bir blok için işaretleyici olarak girinti yapan yüzlek kullanımı idi.
Yani bu temelde ben görünümünde arıyorum düzeni:
{if x is empty}
{if y is array}
Hello World
{endif}
{endif}
Komut ilk if ifadesi bulmak ve aynı derinlikte endif ile eşleşir. True değerlendirir eğer iç blok de işlenecek.
Şimdi, sorun aşağıdaki kodda derinliği kullanmak için normal ifadeyi kurma yaşıyorum:
preg_match_all('|([\t ]?){if (.+?) is (.+?)}(.+?){endif}|s', $template, $match);
Temelde ([\t ]?)
{endif}
değişkeni çeşit kullanarak, ve hiçbir eşleşen {[(varsa deyimi tam olmayacak emin olun önce yerleştirilmesi için ilk maçı istiyorum 1)]} {if ...}
ile aynı derinliğe.
Bana bunu tamamlamak yardımcı olabilir misiniz?