正则匹配嵌套标签内容思路

文章讲述了作者在尝试使用正则表达式匹配和替换HTML嵌套标签内容时遇到的问题,特别提到如何处理包含`<`符号的情况。最终提出了一种改进的正则表达式解决方案,以确保在不包含标签头的情况下正确匹配和替换内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正则匹配嵌套标签内容

百度找了几个嵌套正则都无法满足我的要求。

示例字符串

原使用正则:<#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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值