我不知道这是否可以用正则表达式完成,但我有一段看起来像这样的代码:
[IF Eval==1]
Do this
[/IF]
[IF OtherEval==2]
do this
[IF:insideif ThirdEval==3]
do this other stuff
[/IF:insideif]
[/IF]
我想编写一个正则表达式,它可以为我提供所有[IF
块,并以相应的[/IF]
结束。
我尝试了preg_match_all("'\[IF(.*?)\].*?\[\/IF{1}\]'si", $Str, $Arr)
,但我只获得了没有标签的{IF块([IF:insideif)
我认为捕获组并在{1}
中使用它可以做到这一点,但我不是在正则表达式中经历过的。
答案 0 :(得分:0)
如果您在预测中使用子程序和前瞻与捕获组一起使用,则可以获得所有嵌套[IF]
。
(?=(\[IF[^]]*](?:(?!\[\/?IF[^]]*\]).|(?1))*\[\/?IF[^]]*\]))
请参阅the regex demo和IDEONE demo。
它匹配我的测试字符串中的这些项目:
[IF Eval==1]
Do this
[/IF]
[IF OtherEval==2]
do this
[IF:insideif ThirdEval==3]
do this other stuff
[IF Eval==4]
do another stuff
[/IF]
[/IF:insideif]
[/IF]
[IF:insideif ThirdEval==3]
do this other stuff
[IF Eval==4]
do another stuff
[/IF]
[/IF:insideif]
[IF Eval==4]
do another stuff
[/IF]