0

我正在尝试制作一个小型模板类,但遇到了一些麻烦
,我正在尝试匹配这个嵌套循环

<ul>
    {each $nestedArr}
        <li>{$group}</li>

        <ul>
            {each $users}
                <li>{$name}</li>
            {/each}
        </ul>

    {/each}
</ul>

到目前为止我得到的是这个

preg_match('/{each \$nestedArr}(?:(?R)|(.*?)){\/each}/is', $this->buffer, $match);

但问题是它在第一次关闭时停止{/each}
关于我如何解决这个问题的任何提示?

为了方便起见,我还添加了regex101

4

1 回答 1

1

如果您对如何使用正则表达式感兴趣,请继续阅读,但如评论中所述,您最好在生产中使用一些经过良好测试的组件(这可能使用更好的方法来解析代码)。

要匹配嵌套{each $...}标签,您可以使用

/{each\ \$\w+}  (?: [^{] | {(?!\/?each) | (?R) )*  {\/each}/x

但这与您似乎想要的特定标签不匹配。

为此,您可以使用

/(?={each\ \$nestedArr}) ({each\ \$\w+}  (?: [^{] | {(?!\/?each) | (?1) )*  {\/each})/x
于 2013-08-03T22:17:35.237 回答