免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: iamlimeng
打印 上一主题 下一主题

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

论坛徽章:
0
11 [报告]
发表于 2010-12-18 20:37 |只看该作者
  1. #!/usr/bin/perl
  2. 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>";
  3. $html =~ /标记1.*?(<td>\w+<\/td>).*?标记2(??{push @a,$1})/g;
  4. print "@a\n";
复制代码

论坛徽章:
0
12 [报告]
发表于 2010-12-20 10:55 |只看该作者
回复 8# x9x9


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

论坛徽章:
0
13 [报告]
发表于 2010-12-20 11:09 |只看该作者
回复 11# li_000828


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

论坛徽章:
0
14 [报告]
发表于 2010-12-20 17:14 |只看该作者
强大个JJ啊,循环下,ok

论坛徽章:
0
15 [报告]
发表于 2010-12-21 10:08 |只看该作者
11楼用法很巧妙,不过我认为没多少人能看懂

论坛徽章:
0
16 [报告]
发表于 2010-12-21 10:22 |只看该作者
呵呵,献丑读解一下这个正则表达式中的非贪婪模式

/标记1.*?(<td>\w+<\/td>).*?标记2(??{push @a,$1})/g


在正则表达式中的贪婪模式
* 代表0到无限次匹配(优先匹配最多的)
+ 代表1到无限次匹配(优先匹配最多的)
? 代表0带1次匹配(优先匹配最多的)
{n,m}代表n到m次匹配(优先匹配最多的)

在正则表达式中的非贪婪模式
*? 代表0到无限次匹配(优先匹配最少的)
+? 代表1到无限次匹配(优先匹配最少的)
?? 代表0带1次匹配(优先匹配最少的)
{n,m}? 代表n到m次匹配(优先匹配最少的)

我记得默认都是贪婪模式,贪婪模式就是匹配最多符合条件的
而在这些标记后面加上?  就是用非贪婪模式

论坛徽章:
0
17 [报告]
发表于 2010-12-21 10:23 |只看该作者
本帖最后由 toniz 于 2010-12-21 10:26 编辑

没答到点子上

论坛徽章:
0
18 [报告]
发表于 2010-12-21 10:29 |只看该作者
提示下,这正则是不会匹配到的。

论坛徽章:
0
19 [报告]
发表于 2010-12-21 10:47 |只看该作者
标记2(??{push @a,$1})  
如果前面的出现0或1次(优先0次),将前面捕获1中的内容添加到@a中
捕获1的内容是 (<td>\w+<\/td>) \w+是贪婪匹配,加上后面的 .*?标记2 ?? 限制了捕获1的贪婪范围.
perl中的code竟然能写到正则表达式中...

论坛徽章:
0
20 [报告]
发表于 2010-12-21 11:05 |只看该作者
继续  还不是重点
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP