免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11242 | 回复: 4
打印 上一主题 下一主题

网页抽取正则问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-17 22:50 |显示全部楼层 |倒序浏览
my $html = "<table><tr><td>aa</td><td>bb</td></tr></table>标记1<table><tr><td>cc</td><td>dd</td></tr></table>标记2<table><tr><td>ee</td><td>ff</td></tr></table>";

我有这样一段网页代码,我想得到“标记1”后的td对,即:<td>cc</td><td>dd</td>,并装入数组@td,相当于
@td = ("<td>cc</td>","<td>dd</td>");

我以前都是分两次走,显然很啰嗦:
  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;

  4. my $html = "<table><tr><td>aa</td><td>bb</td></tr></table>标记1<table><tr><td>cc</td><td>dd</td></tr></table>标记2<table><tr><td>ee</td><td>ff</td></tr></table>";
  5. my ($need) = ($html =~ /标记1(.*?)标记2/i);
  6. my (@td) = ($need =~ /(<td>.*?<\/td>)/ig);
  7. print "@td";
复制代码
有没有办法一步做到?
  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;

  4. my $html = "<table><tr><td>aa</td><td>bb</td></tr></table>标记1<table><tr><td>cc</td><td>dd</td></tr></table>标记2<table><tr><td>ee</td><td>ff</td></tr></table>";
  5. my @td = ($html =~ /.*?标记1.*?(<td>.*?<\/td>)+/i);
  6. print "@td";
复制代码
尝试这样写,但只得到"<td>dd</td>"。

请精通正则的高手指教。

论坛徽章:
0
2 [报告]
发表于 2010-12-17 22:57 |显示全部楼层
我已习惯了用正则,有空试试HTML::TreeBuilder 。

我这里只是举个例子,有些时候,数据不是网页,也有类似情况。

论坛徽章:
0
3 [报告]
发表于 2010-12-20 10:55 |显示全部楼层
回复 8# x9x9


    谢谢给出的方案,这个可以匹配需要的数据,但没有分别装入数组,它是一次性将所有需要的数据装入数组的第一个元素,要完成任务,那也还是要分两步走。

论坛徽章:
0
4 [报告]
发表于 2010-12-20 11:09 |显示全部楼层
回复 11# li_000828


    非常感谢,很好,很强大,是我想要的答案。

论坛徽章:
0
5 [报告]
发表于 2010-12-21 15:02 |显示全部楼层
回复 21# 黑色阳光_cu


    谢谢黑色阳光,这个正则很强大,就是我想要的正则。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP