正则匹配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>就匹配不到
还有结束标签的匹配也是,我不知道哪里写错了,求高手指点

    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>>)
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-01-13
你的问题实在是没阐述明白,你是不是要取得“这是里我要提取的html”,试试下面的表达式
/(?:<(?:[a-z]*\d)>)*我是标题(?:<\/(?:[a-z]*\d)>)*(.*)<div class="fsfsdfsdfsdfdsfsdfd">/
第2个回答  2015-10-01
***************************************************************************后面的,就和前面的一个道理
你的问题错的地方多着呢!!
[\\<[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
第3个回答  2014-01-13
***************************************************************************后面的,就和前面的一个道理
你的问题错的地方多着呢!!
[\\<[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本回答被提问者和网友采纳

正则匹配html开始标签和结束标签
思路:先匹配最前面的起始标签,假设是div(<div),接着一旦遇到嵌套div,就“压入堆栈”,后面如果遇到div闭合标签了,就“弹出堆栈”。如果遇到闭合标签的时候,堆栈里面已经没有东西了,那么匹配结束,此结束标签为正确的闭合标签。1、匹配任意闭合HTML标签的正则表达式 <(?<HtmlTag>[\\w]+)[^>]*...

正则表达式匹配HTML标签之间的内容
假如html标签里面有一句:String a = "<style type=\\"text\/css\\"> div \\n" + "{ margin: 0; padding: 0; outline: 0; }<\/style>";我如何把这一句取出来呢,包括标签。用正则表达式:<style([\\\\s\\\\S]*)<\/style>

在正则表达式中“\/”和“\\”符号的区别!
正则表达式中"\/"是表达式开始和结束的标记,“\\”可以将后面出现的字符标记为特殊字符,接下来在PHP中具体演示一下:1,正则表达式是以\/作为开始和结束的标记,表达式语法在两个\/中间包裹,如下图所示 2,接着演示一下\\,像下面的表达式匹配的是n 3,但是如果在n前面加上\\匹配的就是换行符号了,如...

这个正则表达式是什么意思?var re= \/<\\S[^>]*>\/g
符号 \/ 和 \/ 之间是正则表达式的内容 最后面的 g 表示 全局匹配(查找所有匹配),如果没有这个g只查找第一个 < 就是这个符号 \\S 查找非空字符 [^>] 查找除>之外的字符 是数量词,表示零个或零个以上 > 就是这个符号 合起来是:1、以<开头 2、后面紧邻的不是非空字符(空格、回车、制表...

正则表达式获取html标签
alert(d.getElementsByTagName("span")[0].innerText);用正则 var str = '<tr><td class="ppprod_lefttd ppprod_cell">上次余额:<\/td><td class="ppprod_confirm ppprod_cell" id=""><span name="item22" id="item22" delim="" class="" >114.74<\/span> <\/td><\/tr>';alert...

实现一个简单的HTML parser
词法分析词法分析的主要任务是将HTML文本分解为一系列的词(token)。例如,文本中的``、``和文本内容等。解析器通过正则表达式来识别这些词。正则表达式用于匹配开始标签、结束标签和文本内容。匹配开始标签时,直接将其封装为一个token。匹配结束标签时,同样将其封装为一个token。对于文本内容,解析器直接...

如何用正则表达式匹配指定字符开始和指定字符结束?
1,正则匹配指定字符开始和指定字符结束,如以a开始结束的正则表达式为:a.*?b ,即以a开始b结束的字符可能被匹配。2,将dedecms批量改动太的sql语句记下来,伪静太或动态页面的时候很有用。3,进入后台→系统→SQL命令行工具→运行SQL命令行: 单行命令执行查询命令:将所有文档设置为“仅动态”:...

正则表达式,(?m)<script[^>]*>(\\w|\\W)*?<\/script[^>]*>改为保留http开 ...
return Regex.Replace(input, "<((?!img)[^<>])+>[^<>]*", "");

我想匹配一个html里面所有div的标签,div可能还有样式或id,如果用正则表...
简单的操作可以用正则去匹配,但是负责的,你就要重新看待问题?html是dom结构,你完全可以用js操作dom的方法就可以获取所有的div,而且很方便,用正则表达式,多次一举,而且效率不高;用jquery匹配一个页面的所有的div例子:(function(){ \/\/就这么一句话,就获取了页面所有的div var divs = $("div")...

正则表达式的疑问
第一 .*为贪婪匹配,会尽可能匹配字符因此<H1>test<\/H1><HR><H1>temp<\/H1>会匹配到中间所有内容 第二.在HTML标签开始和结束标记尖括号<>中还可能包含双引号,等号等等\/w不匹配的字符,比如 <img src='test.jpg'>test<\/img> 第三.(?<=)和(?=)在很多语言中要求后面的正则表达式宽度固定,不...

相似回答