正则表达式可不可以匹配某个html标记之间的所有代码?
这个问题比较难表述。比如有一段这样的html代码:------<divid="a">......<divstyle="..">...</div>....这里有n个<div...
这个问题比较难表述。
比如有一段这样的html代码:
------
<div id="a"> ... ... <div style=".."> ...</div> ....
这里有n个<div>...</div>,n为未知数
</div>
-------
上述代码中,“<div id="a">”只出现了一次,且所有<div></div>均能够一一配对。且与<div id="a">相匹配的</div>前后均没有任何特殊的,可以用于判断的字符。
现在我想用正则表达式匹配 <div id="a"> 到与之相对应的</div>之间的所有字符,
但由于中间夹杂多个</div>,不能判断哪一个</div>才是我需要的结束条件。
不知道我的意思表达清楚了没有?
请问那个正则表达式应该怎样写?
因为我这里是一个类似小偷程序的asp程序,在服务器端执行,vbscript语法。
现在需要获取某个网页上的所有源代码后直接在服务器上提取<div id="a">...</div>之间的代码,然后稍微处理后直接保存到数据库中,与客户端是无关的。
因为不是在客户端进行,所以,不能使用客户端js下的document.getElementById("a").innerHTML这种方法。
我知道可以用for来寻找。但我想知道可不可以用正则表达式来实现。
又或者,还有没有别的方法可以实现? 展开
比如有一段这样的html代码:
------
<div id="a"> ... ... <div style=".."> ...</div> ....
这里有n个<div>...</div>,n为未知数
</div>
-------
上述代码中,“<div id="a">”只出现了一次,且所有<div></div>均能够一一配对。且与<div id="a">相匹配的</div>前后均没有任何特殊的,可以用于判断的字符。
现在我想用正则表达式匹配 <div id="a"> 到与之相对应的</div>之间的所有字符,
但由于中间夹杂多个</div>,不能判断哪一个</div>才是我需要的结束条件。
不知道我的意思表达清楚了没有?
请问那个正则表达式应该怎样写?
因为我这里是一个类似小偷程序的asp程序,在服务器端执行,vbscript语法。
现在需要获取某个网页上的所有源代码后直接在服务器上提取<div id="a">...</div>之间的代码,然后稍微处理后直接保存到数据库中,与客户端是无关的。
因为不是在客户端进行,所以,不能使用客户端js下的document.getElementById("a").innerHTML这种方法。
我知道可以用for来寻找。但我想知道可不可以用正则表达式来实现。
又或者,还有没有别的方法可以实现? 展开
4个回答
展开全部
正则表达式应该是可以的,不过没有尝试.如果中间的div没有嵌套可以用 <div id='a'>((?:<div [^>]*>.*<\/div>)+)<\/div>,具体情况具体分析.另外可以根据上下文来捕捉.
js可以在客户端操控dom,服务器端有时也要操作dom,dom的操作是有很多语言实现的,如java,javascript,php,asp,perl,python...几乎每个语言都有操作dom的库.函数名大同小异.
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
Microsoft.XMLDOM(XMLDOM)对象的属性和方法
nodeFromID
js可以在客户端操控dom,服务器端有时也要操作dom,dom的操作是有很多语言实现的,如java,javascript,php,asp,perl,python...几乎每个语言都有操作dom的库.函数名大同小异.
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
Microsoft.XMLDOM(XMLDOM)对象的属性和方法
nodeFromID
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
涉及到 递归匹配
VBScript 里的正则做不到
ASP.NET 里的正则可以
VBScript 里的正则做不到
ASP.NET 里的正则可以
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这要用到正则的“平衡组/递归匹配”:
<div id="a"[^>]*>[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>
参考资料:正则表达式30分钟入门教程
<div id="a"[^>]*>[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>
参考资料:正则表达式30分钟入门教程
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用正则向前查找和向后查找(JS不支持向后),还要贪婪模式!PHP的话
$re
=
'/(?<=\<div
class="a"\>).*(?=\<div\>)/i'
$re
=
'/(?<=\<div
class="a"\>).*(?=\<div\>)/i'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询