TEL:400-8793-956
当前位置:程序、服务器

正则表达式 - 具有多个结尾的嵌套匹配

提问者: 近期获赞: 浏览人数: 发布时间:2022-02-14 09:39:29

 问:这是我关于 stackoverflow 的第一个问题,所以请在这里与我交谈。另外,我不是以英语为母语的人。我的正则表达式遇到以下困难:

 
这是字符串(“true”和/或“false”实际上不在字符串中,但有助于简化):
 
**[if true]**
    [if true]
        [if false]
        [else]
        [/if]
    *[elseif false]*
        [if true]
        [/if]
    [else]
    [/if]
**[elseif false]**
[/if]
**[if false]**
    [if false]
    [else]
    *[/if]*
**[else]**
    [if true]
    [/if]
[/if]
我标记了想要的匹配(**) 和我得到的匹配 ( *)
 
在这种情况下,我只想匹配最外层的父 [if XXXX].([else]|[elseif XXX]|[/if]) 语句与其相应的结尾,可以是 [else]、[elseif XXX] 或[/如果]。现在我不关心内部 [if XXX],因为当父母为假时,我不需要检查它们。
 
运行我的正则表达式时:
 
/\[if (.*?)\](((?R)|.)*?)(\[\/if\]|\[else\]|\[elseif )/gs 
它匹配父母 [if XXX] 和其中任何 [elseif XX]、[else]、[/if] 的不连贯组合。
 
作为组,我确实需要匹配 > 每 X [if XXX] > [if XXX] 和匹配的 [END] 以及 [END] 之间的内容。
 
由于我不完全理解递归,我很感激你的帮助。提前谢谢了!
 
 
答:这可能很接近?
它还捕获外部结束标记。
但是不知道如何在不破坏递归的情况下避免这种情况。
 
\[(if|elseif|else) ?(.*?)\](((?R)|[^\[\]])*?)(?:.(?=\[else.*?\])|\[\/if\])
上一篇: PHP双while循环[关闭]
下一篇: 我的浏览器,没有用 https 显示我的网站