正则匹配嵌套标签内容
百度找了几个嵌套正则都无法满足我的要求。
示例字符串
原使用正则:<#if.*?<\/#if>
<#if> <#if> aaa </#if> ccc </#if>bbb<#if>ddd</#if>
需要替换<#if></#if>标签内容为空,最终效果应只保留bbb,因为bbb没有被标签包含
匹配思路
使用单个标签匹配,逐级替换内容后,再重新匹配。
主要判断:在中间过程中不包含标签头的内容。不包含头,就不需要判断标签尾。
html应该标签类似同理,可将子标签替换为{div1}、{div2}等形式,需要恢复时,再进行内容还原
实现过程
此方案虽然能够实现最终留下bbb,但不支持#if中包含<符号,如1<2。不符合匹配思路
<#if[^<#if]*>[^</#if>]*</#if>
百度之后使用新写法
参考地址:https://blog.youkuaiyun.com/xiiii/article/details/89450341
最终正则
即在原匹配单个标签正则中,增加不包含标签头的判断
<#if((?!<#if).)*?<\/#if>
\1代表第一个匹配内容,这样单标签匹配只需要改头尾就行
(<#if)((?!\1).)*?</#if>