Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取匹配模板标记之间的内容_Php_Templates - Fatal编程技术网

Php 获取匹配模板标记之间的内容

Php 获取匹配模板标记之间的内容,php,templates,Php,Templates,如何将内容从{@if condtwo}获取到匹配的{!if} {@if condtwo} {@if condone} show this if condone is true {!if} other contents {!if} <- matching {!if} 问题是它只获取从{@if condtow2}到下一个{!if}的所有内容: {@if condtwo} {@if condone} this is a table

如何将内容从
{@if condtwo}
获取到匹配的
{!if}

{@if condtwo}
    {@if condone}
        show this if condone is true
    {!if}
other contents
{!if} <- matching {!if}
问题是它只获取从
{@if condtow2}
到下一个
{!if}
的所有内容:

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

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

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

您可能还想看一看。

请不要尝试使用正则表达式解析这些内容。尽管PHP支持递归匹配(至少,我认为它支持),但您确实不应该这样做。很乱,好吧,你是说我现在可以用了?我正要重做我所有的代码again@kapitanluffy:是的,你现在可以用了:)它实际上并不像我原来想的那么凌乱。对不起,你介意给我解释一下它是怎么工作的吗?我了解大部分内容,但不了解?R和?>[parts@kapitanluffy:
?>
是一个仅用于提高效率的子模式;
?R
表示“再次匹配整个正则表达式”-这是实现递归的原因。您可以查看我链接的文档,以获得更全面的解释。
/{@if(.+?)}(((?>[^{}]+)|(?R))*){!if}/si