【发布时间】:2009-11-17 11:33:39
【问题描述】:
我正在 PHP 中构建一个伪变量解析器,以允许在视图中使用简洁的语法,并为 if 语句实现了一个引擎。现在我希望能够使用嵌套的 if 语句,而我想到的最简单、最优雅的解决方案是使用标识作为块的标记。
所以这基本上是我在视图中寻找的布局:
{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 ...}。
你能帮我完成吗?
【问题讨论】:
-
您不想使用其中之一的任何原因? webresourcesdepot.com/19-promising-php-template-engines
-
我正在扩展 CodeIgniter 中内置的模板引擎,if 语句是我需要的唯一薄薄的左侧。
标签: php regex preg-match-all