登陆注册
4945

正则匹配html开始标签和结束标签

站长网2023-07-02 10:22:145

HTML标签是支持嵌套的,怎么能够找到指定标签相对应的闭合标签是最重要的问题。

思路:先匹配最前面的起始标签,假设是div(<div),接着一旦遇到嵌套div,就“压入堆栈”,后面如果遇到div闭合标签了,就“弹出堆栈”。如果遇到闭合标签的时候,堆栈里面已经没有东西了,那么匹配结束,此结束标签为正确的闭合标签。

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

                                
  1. <(?<HtmlTag>[\w]+)[^>]*?>((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|.*?)*</\k<HtmlTag>>

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

                                
  1. <(?<HtmlTag>div)[^>]*?>((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|.*?)*</\k<HtmlTag>>

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

                                
  1. <(?<HtmlTag>(div|span|h1))[^>]*?>((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|.*?)*</\k<HtmlTag>>

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

                                
  1. <(?<HtmlTag>[\w]+)[^>]*\s[iI][dD]=(?<Quote>["']?)footer(?(Quote)\k<Quote>)[^>]*?(/>|>((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|.*?)*</\k<HtmlTag>>)
0005
评论列表
共(0)条