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

<div>我是标题</div>这是里我要提取的html<div class="fsfsdfsdfsdfdsfsdfd">
<div><h2>我是标题</h2></div>这是里我要提取的html<div class="fsfsdfsdfsdfdsfsdfd">
<div><b><h2>我是标题</h2></b></div>这是里我要提取的html<div class="fsfsdfsdfsdfdsfsdfd">
我是标题周围可能存在很多种html的组合,这里随便列了几个
我的正则是这样写的
[\\<[a-z\\d]*\\>]*我是标题[\\</[a-z\\d]*\\>]*(?<x>.*?)<div class="fsfsdfsdfsdfdsfsdfd">
但是[\\<[a-z\\d]*\\>]*只能匹配多个<div><div><div> 这样一样的<div><b><h2>就匹配不到
还有结束标签的匹配也是,我不知道哪里写错了,求高手指点
最新回答
偏执的浪漫

2024-10-16 08:15:44

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

思路:先匹配最前面的起始标签,假设是div(<div),接着一旦遇到嵌套div,就“压入

堆栈
”,后面如果遇到div闭合标签了,就“弹出堆栈”。如果遇到闭合标签的时候,堆栈里面已经没有东西了,那么匹配结束,此结束标签为正确的闭合标签。

1、匹配任意闭合HTML标签的

正则表达式

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

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

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

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

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

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

<(?<HtmlTag>[\w]+)[^>]*\s[iI][dD]=(?<Quote>["']?)footer(?(Quote)\k<Quote>)[^>]*?(/>|>((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|.*?)*</\k<HtmlTag>>)
菠萝草莓酱

2024-10-16 16:22:23

你的问题实在是没阐述明白,你是不是要取得“这是里我要提取的html”,试试下面的表达式
/(?:<(?:[a-z]*\d)>)*我是标题(?:<\/(?:[a-z]*\d)>)*(.*)<div class="fsfsdfsdfsdfdsfsdfd">/
青春喂了作业

2024-10-16 20:27:25

***************************************************************************后面的,就和前面的一个道理
你的问题错的地方多着呢!!
[\\<[a-z\\d]*\\>]*我是标题,第一个[,不应该用[后直接用\,\就是转义符了,开始没特殊符号转义符\不能用。后面<[a-z\\d]*\\>,尖括号中的[a-z\\d],这里\\d不能用,要表示\,就最后放个\,\d,也不要用在方括号里,语法错误\d本来代表一位数字[0-9]。外面的*,用得不明确,意思说可以不匹配<div>了哟。还好你是贪婪模式,还能匹配个<div>
***************************************************************************后面的,就和前面的一个道理

就这么几句就能提取:
一、正则表达式:

<div>.*?</div>(.*?)<div

提取表达式 \1 或者 $1
提取【这是里我要提取的】用\n或者$n支持什么就用什么

二、正则表达式:

<div><h2>.*?</h2></div>(.*?)<div

提取表达式 \1 或者 $1

三、正则表达式:

<div><b><h2>.*?</h2></b></div>(.*?)<div

提取表达式 \1 或者 $1
清风未央

2024-10-16 10:51:04

***************************************************************************后面的,就和前面的一个道理
你的问题错的地方多着呢!!
[\\<[a-z\\d]*\\>]*我是标题,第一个[,不应该用[后直接用\,\就是转义符了,开始没特殊符号转义符\不能用。后面<[a-z\\d]*\\>,尖括号中的[a-z\\d],这里\\d不能用,要表示\,就最后放个\,\d,也不要用在方括号里,语法错误\d本来代表一位数字[0-9]。外面的*,用得不明确,意思说可以不匹配<div>了哟。还好你是贪婪模式,还能匹配个<div>
***************************************************************************后面的,就和前面的一个道理

就这么几句就能提取:
一、正则表达式:

<div>.*?</div>(.*?)<div

提取表达式 \1 或者 $1
提取【这是里我要提取的】用\n或者$n支持什么就用什么

二、正则表达式:

<div><h2>.*?</h2></div>(.*?)<div

提取表达式 \1 或者 $1

三、正则表达式:

<div><b><h2>.*?</h2></b></div>(.*?)<div

提取表达式 \1 或者 $1