请教一个正则表达式的问题

xhiaa 2010-10-18 04:15:55
我有一个这样结构的html
<html>
<body>
<div id="1">
<table><div></div></table>
<table><div></div></table>
<table><div></div></table>
</div>
</body>
</html>


我想提取第一层div(即id=1的div)的源码,正则表达式怎么写呢~?

谢谢!!
...全文
183 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhiaa 2010-10-21
  • 打赏
  • 举报
回复
顶。。。。。
  • 打赏
  • 举报
回复
再仔细看我#7楼的

输出到你的页面中生成html dom对象,然后再输出操作html dom的js代码

下面是C#的过程
//你的抓取代码,将采集到html保存到一个变量中
Response.Write("输出这个变量");
Response.Write("操作html dom的代码,并提交到服务器端");
xhiaa 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 showbo 的回复:]
在客户端用js操作比较简单,就document.getElementById('控件ID').innerHTML就行了

在服务器端的话,就你那个字符串不好用正则,只能使用别人写好的html parser来分析
[/Quote]

我获取到的是TEXT格式的,能用innerHTML提取出那段div?
hoojo 2010-10-19
  • 打赏
  • 举报
回复
投机取巧下,放到隐藏的地方,然后用innerHTML获取比较简单
xhiaa 2010-10-19
  • 打赏
  • 举报
回复
我要截取<div id="detailbox2">这一段的源码。。。。
xhiaa 2010-10-19
  • 打赏
  • 举报
回复
哎~~我试了下,alert出来的对话框是空白的。。。。。
直接上代码了……


function getDatas()
{
var xmlHttp;
//对于Firefox和Opera等浏览器
if (window.XMLHttpRequest)
{
xmlHttp = new XMLHttpRequest();
}
else //对于IE浏览器
{
//将IE的不同XMLHttp实现声明数组
var MSXML=['Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
//依次对每个XMLHTTP实现创建XMLHttpRequest对象
for(var i=0;i<MSXML.length;i++)
{
try
{
xmlHttp=new ActiveXObject(MSXML[i]);
break;
}
catch (ex)
{
alert("您的浏览器不支持AJAX!");
return false;
}
}
}
 xmlHttp.open("GET", "http://www.szsi.gov.cn/zxbs/wscx/ddyb/dg/", true);
 xmlHttp.send();

xmlHttp.onreadystatechange=function()
{

if(xmlHttp.readyState==4)
{
if (xmlHttp.status == 200)
{ // 信息已经成功返回,开始处理信息


var html=xmlHttp.responseText;
var dom,v='';

if (document.all)
{
dom = new ActiveXObject("microsoft.xmldom");
dom.loadXML(html);
}
else if (window.DOMParser)
{
dom = new DOMParser().parseFromString(html, 'text/xml');
}

if (dom)
{
var dvs = dom.getElementsByTagName('div');
for (var i = 0; i < dvs.length; i++)
{
if (dvs[i].getAttribute('id') == 'detailbox2')
{
if (document.all)
v = dvs[i].xml;
else
v = new XMLSerializer().serializeToString(dvs[i]);
break;
}
}
}
alert(v);
}
else
{ //页面不正常
window.alert("您所请求的页面有异常。");
}
}
}
}




HTML源码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
</head>

<body>
<div id="page-container">
<table width="998" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><div id="header1">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="52%" height="39" class="fontwhite12"></td>
<td width="48%"><div align="right" class="fontwhite12"> </div></td>
</tr>
</table>
</div></td>
</tr>
</table>
<div id="nav">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="16" valign="top"></td>
<td><div id="sectionLinks">
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td></td>
</tr>
</table>
</div></td>
<td width="280" valign="top"><table width="100%" border="0" align="right" cellpadding="0" cellspacing="0">
<tr>
<td height="34"><div align="right"><a onclick="openSearch();" href="javascript:void(0);" target="_top" class="linkfontblack12">站内搜索</a>: </div></td>
</tr>
</table></td>
<td width="17"></td>
</tr>
</table>
</div>
<div id="content">
<table width="97%" height="47" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="25"></td>
</tr>
<tr>
<td height="14" valign="top"><div style="border-bottom:1px dashed #999999"></div></td>
</tr>
</table>
<table width="97%" height="25" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="205" height="25" valign="top" background="../../../images/leftdi.gif">
<div id="detailbox1small">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="89" background="../../../images/online_leftpic.gif"> </td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td height="15"></td>
</tr>
</table>
</div></td>
<td width="15" valign="top"> </td>
<td width="747" valign="top"><table width="100%" height="25" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="140"><div id="titlebox3">深圳医疗保险定点机构</div></td>
<td width="2"> </td>
<td width="140" valign="top"><div id="sectionLinks1"> <a href="./gs/" target="_self" class="linkfontblack12">工伤医疗保险定点机构</a></div></td>
<td width="2"> </td>
<td width="190"><div id="sectionLinks1"> <a href="./sr/" target="_self" class="linkfontblack12">深圳市少儿医保定点医疗机构名单</a></div></td>
<td width="2"> </td>
<td width="133" valign="top"><div id="sectionLinks1"> <a href="./mz/" target="_self" class="linkfontblack12">定点门诊卫生所/室</a></div></td>
<td width="2"> </td>
<td width="133" valign="top"><div id="sectionLinks1"> <a href="./yd/" target="_self" class="linkfontblack12">医疗保险定点零售药店</a></div></td>
<td width="2"> </td>
<td width="133" valign="top"><div id="sectionLinks1"> <a href="./dxs/" target="_self" class="linkfontblack12"> 大学生定点医疗机构 </a></div></td>
</tr>
</table>
<div id="detailbox2">
<table width="100%" border="0" cellspacing="0" cellpadding="3">
<tr>
<td width="88%">•  <a href="./dg/201010/t20101014_3234.htm" target="_blank" title="住院医保及农民工医保供绑定社康中心一览表(坪山新区)" class='linkfontblack14'>住院医保及农民工医保供绑定社康中心一览表(坪山新区)</a></td>
<td width="12%"><span class="fontgray11">[2010-10-14]</span></td>
</tr>
<tr>
<td height="10" colspan="2"><div style="border-bottom:1px dashed #999999"></div></td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="3">
<tr>
<td width="88%">•  <a href="./dg/201010/t20101014_3233.htm" target="_blank" title="住院医保及农民工医保供绑定社康中心一览表(光明新区)" class='linkfontblack14'>住院医保及农民工医保供绑定社康中心一览表(光明新区)</a></td>
<td width="12%"><span class="fontgray11">[2010-10-14]</span></td>
</tr>
<tr>
<td height="10" colspan="2"><div style="border-bottom:1px dashed #999999"></div></td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="3">
<tr>
<td width="88%">•  <a href="./dg/201010/t20101014_3232.htm" target="_blank" title="住院医保及农民工医保供绑定社康中心一览表(龙岗区)" class='linkfontblack14'>住院医保及农民工医保供绑定社康中心一览表(龙岗区)</a></td>
<td width="12%"><span class="fontgray11">[2010-10-14]</span></td>
</tr>
<tr>
<td height="10" colspan="2"><div style="border-bottom:1px dashed #999999"></div></td>
</tr>
</table>
</div>
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="linkfontblack12">
<tr>
<td height="50"><div align="center" class="linkfontblack12"> </div></td>
</tr>
</table></td>
</tr>
</table>
</td>
</tr>
</table>
<br />
</div>
<div id="footer">
<table width="998" border="0" cellspacing="0" cellpadding="0">
<!--DWLayoutTable-->
<tr>
<td height="20" colspan="3" valign="top" bgcolor="#0F98DD" class="fontwhite12"><div align="center"> <a href="../../../sbjxxgk/contracttype/" target="_blank" class="linkfontwhite12">联系我们</a> | <a href="../../../othermsg/flsm/" target="_blank" class="linkfontwhite12"> 法律声明 </a> | <a href="../../../othermsg/sitemap/" target="_blank" class="linkfontwhite12">网站导航 </a> | <a href="../../../othermsg/gjjs/" target="_blank" class="linkfontwhite12">检索中心</a></div></td>
</tr>
<tr>
<td width="415" height="68" valign="top"><div align="center" class="fontwhite12">
<p></p>
</div></td>
<td colspan="2" valign="top"><div align="center" class="fontwhite12"> </div></td>
</tr>
<tr>
<td height="70" colspan="3" valign="top"><div align="center" class="fontwhite12"> </div></td>
</tr>
<tr>
<td width="152" height="15"> </td>
<td width="235" valign="top"><p>
<iframe width="100%" src="http://61.144.253.111:9080/NetApplyWeb/szsi.jsp" frameborder="0" align="middle" scrolling="no"
height="15px" > </iframe>
</p>
</blockquote></td>
<td width="348"> </td>
</tr>
<tr>
<td height="19" colspan="3" valign="top"><div align="center" >
<table width="50%" height=15px border="0" align="center" cellpadding="0" cellspacing="0">
<!--DWLayoutTable-->

</table>
</div></td>
</tr>
</table>
<br />
</div>
</div>
</body>
</html>
  • 打赏
  • 举报
回复
在客户端用js操作比较简单,就document.getElementById('控件ID').innerHTML就行了

在服务器端的话,就你那个字符串不好用正则,只能使用别人写好的html parser来分析
xhiaa 2010-10-18
  • 打赏
  • 举报
回复
太复杂了。。。只能在html页面中操作,也就是说,只能用客户端语言……
  • 打赏
  • 举报
回复
这个结构用正则不好实现,得自己写HTML parse才行,或者去网上搜索下HTML Parser。

如果那个网站的html代码结构符合xml的格式,可以考虑使用服务器端的XML对象来加载html生成xml dom,这样操作起来就方便了。

如果不符合xml规范,这个就需要html parser来分析html结构了。

或者比较啰嗦一点,但是很简单的的方法就是将捉去到内容输出到你的页面中,用js分析html结构获取到内容后再提交到服务器去。
xhiaa 2010-10-18
  • 打赏
  • 举报
回复
其实是这样子的,我通过向某个地址发送get请求,得到整个html页面的源码,然后想提取其中一个div标签中的源码填到我自己的页面中,现在纠结在怎么提取这个“其中一个div标签中的源码”……
  • 打赏
  • 举报
回复
你这个结构比较难用正则,不能使用innerHTML吗?为什么一定要使用正则?

或者使用XML对象。

XML对象
    var html = '<html>\
<body>\
<div id="main">\
<div id="1">\
<table><div></div></table>\
<table><div></div></table>\
<table><div></div></table>\
</div>\
<div id="2">\
<table><div></div></table>\
<table><div></div></table>\
<table><div></div></table>\
</div>\
</div>\
</body>\
</html>';
var dom,v='';
if (document.all) { dom = new ActiveXObject("microsoft.xmldom"); dom.loadXML(html); }
else if (window.DOMParser) dom = new DOMParser().parseFromString(html, 'text/xml');
if (dom) {
var dvs = dom.getElementsByTagName('div');
for (var i = 0; i < dvs.length; i++)
if (dvs[i].getAttribute('id') == '1') {
if (document.all) v = dvs[i].xml;
else v = new XMLSerializer().serializeToString(dvs[i]);
break;
}
}
alert(v)
xhiaa 2010-10-18
  • 打赏
  • 举报
回复
最后的</div>错了…………
不好意思,我说漏了,结构应该是这样的

<html>
<body>
<div id="main">
<div id="1">
<table><div></div></table>
<table><div></div></table>
<table><div></div></table>
</div>

<div id="2">
<table><div></div></table>
<table><div></div></table>
<table><div></div></table>
</div>
</div>
</body>
</html
xhiaa 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 aspwebchh 的回复:]
var str="你的html"

var str = str.replace(/<div (?=id="1")[\s\S]*<\/div>/gi,"")

alert(str)
[/Quote]

呃,我试了下,不行哇。。。还是整段html源码……
挨踢直男 2010-10-18
  • 打赏
  • 举报
回复
var html="......";
var reg = /<div (?=id="1")[\s\S]*<\/div>/gi
alert(reg.exec(html))
挨踢直男 2010-10-18
  • 打赏
  • 举报
回复
var str="你的html"

var str = str.replace(/<div (?=id="1")[\s\S]*<\/div>/gi,"")

alert(str)

52,780

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧