php模板嵌套循环

时间:2013-08-03 21:54:10

标签: php regex nested

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

<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

1 个答案:

答案 0 :(得分:1)

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

要匹配嵌套的{each $...}代码could use this

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

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

要做到could use

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