原标题:正则匹配闭合HTML标签(支持嵌套)

任何复杂的正则表达式都是由简单的子表达式组成的,要想写出复杂的正则来,一方面需要有化繁为简的功底,另外一方面,我们需要从正则引擎的角度去思考问题。关于正则引擎的原理,推荐《Mastering Regular Expression》中文名叫《精通正则表达式》。挺不错的一本书。

OK,先确定我们要解决的问题——从一段Html文本中找出特定id的标签的innerHTML。

这里面最大的难点就是,Html标签是支持嵌套的,怎么能够找到指定标签相对应的闭合标签呢?

我们可以这样想,先匹配最前面的起始标签,假设是div吧(

我之所以能够这样去思考,是因为我了解过正则的特性,我知道正则中的平衡组能够实现我刚才说的“堆栈”操作。所以,如果我们要编写复杂正则表达式,需要对正则的一些高级特性至少有所了解,这样我们思考问题才有个方向。

================================

匹配任意闭合HTML标签的正则表达式:

[w]+)[^>]*?>((?[^>]*>)|>(?)|.*?)*>

如果只想匹配div标签,可以使用下面的正则表达式:

div)[^>]*?>((?[^>]*>)|>(?)|.*?)*>

是的,你可以把div修改成任意你想要匹配的HTML标签

如果想同时匹配多个HTML标签,可以使用下面的正则表达式:

(div|span|h1))[^>]*?>((?[^>]*>)|>(?)|.*?)*>

你还可以继续添加更多要匹配的标签

如果想匹配包含ID的标签,可以使用下面的正则表达式:

[w]+)[^>]*s[iI][dD]=(?["']?)footer(?(Quote)k)[^>]*?(/>|>((?[^>]*>)|>(?)|.*?)*>)

这个正则匹配任意id为footer的HTML标签

本文不完全转载了http://www.imkevinyang.com/2009/07/使用正则表达式匹配嵌套html标签.html的内容

来源:https://www.cnblogs.com/youring2/p/3836259.html

版权申明:本文来源于网友收集或网友提供,如果有侵权,请转告版主或者留言,本公众号立即删除。返回搜狐,查看更多

责任编辑:

正则匹配承兑的html,正则匹配闭合HTML标签(支持嵌套)相关推荐

  1. js正则匹配闭合标签_正则匹配闭合HTML标签(支持嵌套)

    OK,先确定我们要解决的问题--从一段Html文本中找出特定id的标签的innerHTML. 这里面最大的难点就是,Html标签是支持嵌套的,怎么能够找到指定标签相对应的闭合标签呢? 我们可以这样想, ...

  2. 正则学习(2)--- 简单匹配原理

    写写对简单的匹配原理的理解,还是以php为主. 首先,正则引擎主要可分为两大类:DFA和NFA,反正引擎见多了就不奇怪了,简单理解就是不同的匹配方式,就好比在数组中查找数据时,有的是从头开始顺序,查找 ...

  3. 正则东西类,简化正则匹配

    [代码] 正则东西类 import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import ...

  4. java中正则全局匹配_JS中正则表达式全局匹配模式/g用法实例

    JS中正则表达式全局匹配模式 /g用法详解 本文章来详细介绍js中正则表达式的全局匹配模式 /g用法, var str = "123#abc"; var re = /abc/ig; ...

  5. php 匹配图片路径_php正则匹配图片路径原理与方法

    下面我来给大家介绍在php正则匹配图片路径原理与实现方法,有需要了解的朋友可进入参考参考. 提取src=里面的图片地址还不足够,因为不能保证那个地址一定是绝对地址,完全的地址,如果那是相对的呢?如果地 ...

  6. php正则匹配中文和英文字母,PHP正则匹配中文字母数字正则的表达式

    PHP正则匹配中文字母数字正则的表达式 PHP语言是一门实用性很强的语言,下面小编为大家带来了关于PHP正则匹配中文字母数字正则的'表达式,欢迎大家阅读! PHP正则匹配中文字母数字正则的表达式 代码 ...

  7. python正则匹配任意字符_Python 正则表达式 匹配任意字符的写法

    .(句点)匹配除了换行之外的所有一个字符, .*(点-星)匹配除了换行外的所有字符>>> >>> r=re.compile(r'.*') >>> ...

  8. php正则匹配一个汉字,php正则表达式匹配中文

    php正则匹配中文 php正则匹配中文的方法非常的简单,我们只要简单的preg_match来执行preg_match("/^[x{4e00}-x{9fa5}A-Za-z0-9_]+$/u&q ...

  9. python re正则提取ip地址_python 正则表达式匹配IP地址

    一.实验环境 1.Windows7x64_SP1 2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 二.实验目的 从tex ...

最新文章

  1. php算出明天的日期,PHP获取昨天、今天及明天日期的方法
  2. 忍不住也谈招聘应聘程序员的事
  3. ubuntu16.04下配置caffe无GPU
  4. Linux挂载windows中的共享目录步骤及问题解决方案(步骤清晰)
  5. Exceptionless服务端+kibana部署实时日志纪要
  6. codeforces Cable Connection
  7. 在Java中模拟求和类型的巧妙解决方法
  8. 那些没有兴趣花必要的C++时间
  9. php打印预览jquery,php 实现打印预览的功能
  10. 董明珠:10个亿不要了,还想再赌五年 雷军:可以试一下
  11. post报文给mqtt服务器没有响应,post请求转为mqtt的方法
  12. 保研复习——信号与系统1:信号与系统(绪论)
  13. 阿里云文本反垃圾检测接口调用
  14. 带上问题来看:主流技术Java、Python怎么?基本功又该怎么学?(什么是MySQL、Linux、算法?又该怎么用?)
  15. 网页上做笔记--Diigo
  16. 圈的ramsey数研究
  17. 正在载入中......loading页面的几种方法
  18. python基础训练—数字
  19. 分享160个ASP源码,总有一款适合您
  20. CF Pairs of Topics

热门文章

  1. html导航栏点击不能跳转,无法单击导航栏中的链接CSS HTML
  2. linux反序列化漏洞,思科多个产品Java反序列化漏洞(CVE-2015-6420)
  3. mysql以下运算符的优先级顺序正确的是_MySQL 运算符
  4. java nextlong_Java Random nextLong()方法与示例
  5. pipedreader_Java PipedReader ready()方法与示例
  6. php框架laravel_Laravel简介(PHP框架)
  7. ORA-00911:无效字符 错误及解决
  8. VB.NET判断一个路径的文件是否存在
  9. 二、WIN10 64位下Pycharm打包.py程序为可执行文件exe
  10. C#中IEnumerableT.GroupBy()的简单使用