正则表达式帮助查找特殊标签

时间:2015-05-27 14:12:06

标签: php regex

我不知道这是否可以用正则表达式完成,但我有一段看起来像这样的代码:

[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}中使用它可以做到这一点,但我不是在正则表达式中经历过的。

1 个答案:

答案 0 :(得分:0)

如果您在预测中使用子程序和前瞻与捕获组一起使用,则可以获得所有嵌套[IF]

(?=(\[IF[^]]*](?:(?!\[\/?IF[^]]*\]).|(?1))*\[\/?IF[^]]*\]))

请参阅the regex demoIDEONE 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]