正则表达式处理BT的html嵌套问题
在博问里面求教大神,把问题搞定。在此做个记录备份,也给碰到类似问题的园友提供解决思路。
简化的业务场景就是,在页面html标签中的属性中嵌套了html标签,怎么用用正则表达式过滤闭合的html标签(<span>匹配</span>,),处理标签外的文字。如下图中的span嵌套span。

图1
具体的正则表达式:<(\w+)([^<]*?(<\1>[\s\S]*?</\1>)?[^<]*?)?((?<!\1)?>[\s\S]*?</\1>|/>)。
总结自己的问题:
1、正则表达式只是用到才看下,临时抱佛脚不是每次都能解决问题的。
2、过于依赖在线正则表达式测试工具,应该在其他工具里试下结果。调试的时候Matches方法返回数组中每项也可以查看下。如图2。

图2
最后附上自己在博问中结帖的链接。
https://q.cnblogs.com/q/91682/
正则表达式处理BT的html嵌套问题的更多相关文章
- Perl正则表达式引用
正则表达式两篇: 基础正则 Perl正则 本文是对Perl正则的一点扩展,主要内容是使用qr//创建正则对象,以及一些其它的技巧. qr//创建正则对象 因为可以在正则模式中使用变量替换,所以我们可以 ...
- 求导程序编写(oo-java编程)
本单元的任务为求导. 即将一个含自变量x的多项式F求导成为另外一个含自变量x的多项式f.使得 dF/dx = f 为降低我们的难度,这个任务被分解成了三个阶段: (1)对幂函数进行求导(不允许嵌套) ...
- OO第一单元总结
OO第一单元作业总结 一.前言 开学四周,不知不觉已经做了三次OO作业.事实上,每一次作业对我来说都是很大的挑战,需要花费大量的时间和精力来学习. 虽然学得很艰苦,但最后还是连滚带爬地完成了.(好惨一 ...
- 面嚮對象程序設計第一單元作業——OO初試
一.三次作业情况简介 第一次:本次作业仅涉及简单的常数和幂函数的加减法.要求在正确输入下给出正确的求导结果,对错误输出报错 第二次:本次作业涉及常数.幂函数和标准正余弦函数的相乘和相加减,难度较上回作 ...
- Pascal数据结构与算法
第一章 数据结构与算法的引入 1.1 数据结构的基本概念 一. 学习数据结构的意义 程序设计 = 数据结构 + 算法 目前,80%的待处理的数据具有“算法简单”(四则运算.检索.排序等),“对象复杂” ...
- 大数据技术之_16_Scala学习_08_数据结构(下)-集合操作+模式匹配
第十一章 数据结构(下)-集合操作11.1 集合元素的映射-map11.1.1 map 映射函数的操作11.1.2 高阶函数基本使用案例1+案例211.1.3 使用 map 映射函数来解决11.1.4 ...
- Java/Js下使用正则表达式匹配嵌套Html标签
转自:http://www.jb51.net/article/24422.htm 以前写过一篇文章讲解如何使用正则表达式完美解决Html嵌套标签的匹配问题(使用正则表达式匹配嵌套Html标签),但是里 ...
- JavaScript正则表达式模式匹配(4)——使用exec返回数组、捕获性分组和非捕获性分组、嵌套分组
使用exec返回数组 var pattern=/^[a-z]+\s[0-9]{4}$/; var str='google 2012'; alert(pattern.exec(str)); //返回一个 ...
- C# 正则表达式大全
文章导读 正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法.Regex 类表示不可变(只读)的 ...
随机推荐
- Nginx gzip参数详解及常见问题(已解决)
1.Nginx gzip功能 Nginx实现资源压缩的原理是通过ngx_http_gzip_module模块拦截请求,并对需要做gzip的类型做gzip,ngx_http_gzip_module是Ng ...
- C语言数据类型的转换(隐式转换)
算术运算符中的转换规则: double ←── float 高↑long↑unsigned↑int ←── char,short 低 注意: 图中横向箭头表示必须的转换,如两个float型数参加运算, ...
- jmeter(高并发测试)
1.首先jmeter需要JDK8以上得运行环境 2.下载jmeter,官方网址:http://jmeter.apache.org/download_jmeter.cgi 3.安装jmeter.jmet ...
- GIT与SVN的比较
Git: 1. 分布式版本控制2. 不需要网络,本地就可以操作版本控制3. 可以是公用的,可以分享4. 不依赖于中央服务器,即使服务器有问题也不会有影响5. 传输方式不一样,git要比svn快很多6. ...
- 040、Docker managed volume(2019-03-01 周五)
参考https://www.cnblogs.com/CloudMan6/p/7152775.html docker managed volume 与bind mount 在使用上最大的区别是不需要 ...
- API(Scanner、Random、ArrayList、String、Arrays、Math)
Scanner import java.util.Scanner; /* public int nextInt(): to get a integer from keyboard public Str ...
- luogu 1640 连续攻击游戏
二分图匹配,将需要进行的编号(1-10000)和物件进行匹配,而非编号之间,编号对应物品 #include<bits/stdc++.h> using namespace std; ; ; ...
- 第19月第20天 UITableView:改变 TableHeaderView 的高度 获取目录大小
1.UITableView:改变 TableHeaderView 的高度 CGRect newFrame = headerView.frame; newFrame.size.height = newF ...
- js获取当前时区GMT
1:js获取当前时区GMT 首先引入插件: <script src="../js/shiqu/jstz-1.0.4.min.js"></script> // ...
- Vue中的双向数据绑定简单介绍
1. 文本框绑定v-module <div id="app"> <input type="text" v-model="msg&qu ...