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

<div>我是标题</div>这是里我要提取的html<divclass="fsfsdfsdfsdfdsfsdfd"><div><h2>我是标题</h2></div>这是... <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>就匹配不到
还有结束标签的匹配也是,我不知道哪里写错了,求高手指点
展开
 我来答
青鸟中关村专家
2015-10-29 · 知道合伙人软件行家
青鸟中关村专家
知道合伙人软件行家
采纳数:1734 获赞数:8440
就职于北大青鸟中关村,自2004年踏入北大青鸟这个行业,已经有11年工作经验和8年的培训经验,寓教于乐

向TA提问 私信TA
展开全部

    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>>)
半点半滴
2014-01-13 · TA获得超过1100个赞
知道小有建树答主
回答量:1607
采纳率:57%
帮助的人:323万
展开全部
你的问题实在是没阐述明白,你是不是要取得“这是里我要提取的html”,试试下面的表达式
/(?:<(?:[a-z]*\d)>)*我是标题(?:<\/(?:[a-z]*\d)>)*(.*)<div class="fsfsdfsdfsdfdsfsdfd">/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
郭某人来此
2015-10-01 · TA获得超过1646个赞
知道答主
回答量:952
采纳率:100%
帮助的人:90.3万
展开全部
***************************************************************************后面的,就和前面的一个道理
你的问题错的地方多着呢!!
[\\<[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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风与雨的故事
2014-01-13 · TA获得超过405个赞
知道小有建树答主
回答量:359
采纳率:80%
帮助的人:245万
展开全部
***************************************************************************后面的,就和前面的一个道理
你的问题错的地方多着呢!!
[\\<[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
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式