0

如何从{@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}
4

1 回答 1

1

好吧,我知道我说过不要使用正则表达式,但是……我撒了谎。这样就可以了,而且这也可能是最好的方法。

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

这是一个工作演示。您可能还想查看递归正则表达式的文档

于 2012-05-26T00:45:43.957 回答