在匹配的模板标签之间获取内容

时间:2012-05-26 00:22:09

标签: php templates

如何将{@if condtwo}的内容提供给匹配的{!if}

{@if condtwo}
    {@if condone}
        show this if condone is true
    {!if}
other contents
{!if} <- matching {!if}

我尝试使用preg_match_all。这是我的正则表达式:

/([\s]*?{@IF(.*?)}[\s]*?)(.+?)([\s]*?{!$IF}[\s]*?)/si

问题是它只能获取{@if condtwo}到下一个{!if}的所有内容:

{@if condtwo}
    {@if condone}
        this is a table
    {!if}

1 个答案:

答案 0 :(得分:1)

好吧,我知道我说不要使用正则表达式,但是...我说谎了。这样做,它也可能是最好的方法。

/{@if(.+?)}(((?>[^{}]+)|(?R))*){!if}/si

Here's a working demo.您可能还想查看the documentation for recursive regular expressions