使递归正则表达式工作的问题,得到循环错误

时间:2017-06-16 17:11:04

标签: php regex

目前我的实际匹配线是

preg_match_all('/(\{%IF:(.+?)%\}\r?\n?)(.+?)(\{%ENDIF:\2%\}\r?\n?)/s',$this->tpl_raw,$if_controls,PREG_SET_ORDER);

寻找

{%IF:NAME%}Do 1{%ENDIF:NAME%}

我得到那场比赛。问题是,它没有做什么,我希望在这样的情况下

{%IF:NAME%}Do 1{%IF:OTHERNAME%} Do 2{%ENDIF:OTHERNAME%}{%ENDIF:NAME%}

我无法让它与内部相匹配。

根据这里的原始答案,我调查了这个

preg_match_all('/(\{%IF:(.+?)%\}\r?\n?)(.+?)|(?R)(\{%ENDIF:\2%\})\r?\n?/s',$this->tpl_working,$if_controls,PREG_SET_ORDER);

但那给了我

preg_match_all(): Compilation failed: recursive call could loop indefinitely at offset 31

任何人都可以协助我完成这项工作吗?

0 个答案:

没有答案