正则表达式可不可以匹配某个html标记之间的所有代码?

来源:百度知道 编辑:UC知道 时间:2024/07/07 06:45:39
这个问题比较难表述。
比如有一段这样的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来寻找。但我想知道可不可以用正则表达式来实现。
又或者,还有没有别的方法可以实现?

涉及到 递归匹配

VBScript 里的正则做不到

ASP.NET 里的正则可以

正则表达式应该是可以的,不过没有尝试.如果中间的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

这要用到正则的“平衡组/递归匹配”:
<div id="a"[^>]*>[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>

参考资料:正则表达式30分钟入门教程