源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Java/Js下使用正则表达式匹配嵌套Html标签

  • 时间:2022-05-12 12:09 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Java/Js下使用正则表达式匹配嵌套Html标签
通用 HTML 标签区配正则 最近看网站日志,发现有人在博客上转了我不知道几年前写的一个匹配 HTML 标签的正则,刚好最近也在做一些相关的事情,顿时来了兴趣。就拿回来改改,成了下面这样,可能会有一些 case 遗漏,欢迎修改,已知在内嵌 <script> 复杂内容的处理能力较弱,不过对纯 HTML 来说已经够用,拿来做一些分析工具还是不错滴。
[url=http://www.1sucai.cn/article/23421.htm]如需引入外部Js需刷新才能执行[/url]]
有朋友留言说Java直接使用的话会报错。我后来查了一下,发现Java正则引擎支持的特性相对比较少。在1.6版本中不能使用命名组(貌似1.7的时候开始支持了),否则会报以下错误,更别说平衡组了。因此感觉要实现无限级的嵌套匹配不大现实。
[url=#]
在上面这个示例中,我们打算匹配id为footer的这个嵌套div,而且假设我们预先知道footer这个div里面最多只会嵌套一级div。更多级的情况我们一会儿再讲。 footer的开始和结束标签匹配很简单: 夹在开始和结束标签之间的内容无非有两种情况: 内容A: div标签,并且此div内无嵌套div 内容B: 任意其他内容 然后就是这两种内容的不断重复而已。正则表示如下:
[u]复制代码[/u] 代码如下:
(<div[^>]*>.*?</div>|.)*?
注意最后面的问号必须要加上,否则由于正则的贪婪匹配特性,footer的闭合标签会匹配失误。 OK了,匹配最多嵌套一级div的正则表达式如下:
[u]复制代码[/u] 代码如下:
<div [^>]*id='footer'[^>]*>(<div[^>]*>.*?</div>|.)*?</div>
那么如果footer标签里头最多会嵌套两级div的话怎么办呢? 其实也不难,我们只需要把上面的“内容A”部分中的点号稍作替换即可。修改如下:
[u]复制代码[/u] 代码如下:
<div [^>]*id='footer'[^>]*>(<div[^>]*>(<div[^>]*>.*?</div>|.)*?</div>|.)*?</div>
到这里你可能就知道,如果要匹配最多嵌套三级div的话,正则应该怎么写了:
[u]复制代码[/u] 代码如下:
<div [^>]*id='footer'[^>]*>(<div[^>]*>(<div[^>]*>(<div[^>]*>.*?</div>|.)*?</div>|.)*?</div>|.)*?</div>
所以实际上,只要你的html结构不是特别复杂的话,也就是说嵌套不会很深的话,那么你完全可以使用这种方式来匹配嵌套html标签。 这个正则在Java和Javascript中都可以使用,因为它没有用到任何高级特性。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部