0

我编写简单的模板语言,但嵌套语句有问题。例如我使用 Foreach,这个正则表达式:

preg_match('/\{foreach +\$(.*?)\}(.*?){\/foreach\}/sui', $this->content, $matches);

一切正常,但是当我在 foreach 中嵌套 foreach 时,出现错误。因为正则表达式获取第一个开始标记但第二个结束标记。

{foreach $XY}

{foreach $YX} {/foreach}

{/foreach}

我该如何解决这个问题?谢谢!

4

1 回答 1

0

正如评论中所说,正则表达式不是解析嵌套上下文的最佳选择。(特别是如果您想构建结果的解析树。)

无论如何,你可以匹配它:

(?xi) {foreach \s++ \$\w++ } (?: [^{}]++ | (?R) )*+ {/foreach}

可以用作:

preg_match_all(',{foreach \s++ \$\w++ } (?: [^{}]++ | (?R) )*+ {/foreach},xi', $str, $matches);

这将为您提供最外层的匹配项。

于 2013-03-14T15:21:17.660 回答