我用的是红宝石。我正在寻找匹配这个的外部"if“组:
{#if x > 10}
<p>{x} is greater than 10</p>
{#if 5 > x}
<p>{x} is less than 5</p>
{/if}
{/if}到目前为止,我得到的是这个正则表达式:
\{#if(.*)}(.|\n)*?\{\/if\}但这只匹配第一条/if语句,而不是最后一条(参见https://rubular.com/r/4l89GlANV9AVCQ)。有什么想法吗?
(我尝试了我在Stack Overflow:https://rubular.com/r/7a4PYTtxFQftob上看到的递归正则表达式匹配器,但我正在努力使其适用于上面的情况)
发布于 2021-09-06 02:43:45
它基本上与您链接到的平衡括号的正则表达式相同,但由于这里的标记是多个字符而不是单个字符,您需要使用负先行模式,而不是简单的否定字符类,以确保中间的匹配字符不是平衡构造的标记的一部分:
{#if.*?}(?>(?!{(?:#if.*?|\/if)}).|\g<0>)*{\/if}演示:https://rubular.com/r/7BU2FStPEP34W4
请注意,您应该使用m选项启用MULTILINE模式,以便.匹配换行符。
https://stackoverflow.com/questions/69068240
复制相似问题