找回密码
 加入
搜索
查看: 2847|回复: 5

[系统综合] 又是正则

[复制链接]
发表于 2013-5-30 12:00:02 | 显示全部楼层 |阅读模式
本帖最后由 lxsky 于 2013-5-30 12:07 编辑

一个网页文件 我需要通过正则 将里面的所有文章内容和图片链接搞出来,
下面是测试的代码,源代码只是$SR多了很多而且无规律,图片和文章混在一起,还有很多无用的html标签之类。
但是正则后有个奇怪的问题:
表达式//[0-9a-z/\._=\?#;&]+"取得了//url“,然后我添加()只取url
但是发现多了几个空白数组:对比A和B的结果,B的结果多了2,4,6 ,且都是空白,为什么呢??????
#include <Array.au3>

Dim $SR = '<p><b fromubb="1"><font size="2">        项目地址:北京市顺义区­</font>'& _
'<p><font size="2">  项目占地:总用地364亩(约24万平米)­</font></p>'& _
'<p><a href="http://www.chla.com.cn/upload/0517146281.jpg#" target="_blank">' & _
'<a href="http://b40.p.com/http_d.cgi?/rurl4_b=79e8131e6cfa4f&a=33&b=40" appendurl="1" target="_blank">'& _
'<img alt="图片" appendurl="1" border="0" src="http://b40.q.com/http_d.cgi?/rurl4_b=79eadfa4f&a=33&b=40" />'& _
'</a>'& _
'</a>'& _
'<wbr/>'& _
'</p>'

Dim $htmlUrl = StringRegExp($SR, '>([^<\n]+)<|//[0-9a-z/\._=\?#;&]+"',3)      ;<========A
;Dim $htmlUrl = StringRegExp($SR, '>([^<\n]+)<|//([0-9a-z/\._=\?#;&]+)"',3)   ;<========B
_ArrayDisplay($htmlUrl, UBound($htmlUrl))


#CS

        A的结果,正则
        [0]        项目地址:北京市顺义区­
        [1]  项目占地:总用地364亩(约24万平米)­
        [2]//www.chla.com.cn/upload/0517146281.jpg#"
        [3]//b40.p.com/http_d.cgi?/rurl4_b=79e8131e6cfa4f&a=33&b=40"
        [4]//b40.q.com/http_d.cgi?/rurl4_b=79eadfa4f&a=33&b=40"

   
   B的结果
   [0]        项目地址:北京市顺义区­
   [1]  项目占地:总用地364亩(约24万平米)­
   [2]
   [3]www.chla.com.cn/upload/0517146281.jpg#
   [4]
   [5]b40.p.com/http_d.cgi?/rurl4_b=79e8131e6cfa4f&a=33&b=40
   [6]
   [7]b40.q.com/http_d.cgi?/rurl4_b=79eadfa4f&a=33&b=40
#CE
发表于 2013-5-30 12:15:16 | 显示全部楼层
本帖最后由 flyeblue 于 2013-5-30 12:17 编辑

url的正则表达式
\<a\shref="([^"]+)" 
img标签的正则表达式
<img[^/]+\ssrc="([^"]+)" 
这样就可以获得所有链接
至于图片第一个需要再次分析
另外用_IELinkGetCollection()要更简单方便啊
发表于 2013-5-30 13:53:14 | 显示全部楼层
本帖最后由 lixiaolong 于 2013-5-30 13:58 编辑

#include <Array.au3>

Dim $SR = '<p><b fromubb="1"><font size="2">        项目地址:北京市顺义区­</font>'& _
'<p><font size="2">  项目占地:总用地364亩(约24万平米)­</font></p>'& _
'<p><a href="http://www.chla.com.cn/upload/0517146281.jpg#" target="_blank">' & _
'<a href="http://b40.p.com/http_d.cgi?/rurl4_b=79e8131e6cfa4f&a=33&b=40" appendurl="1" target="_blank">'& _
'<img alt="图片" appendurl="1" border="0" src="http://b40.q.com/http_d.cgi?/rurl4_b=79eadfa4f&a=33&b=40" />'& _
'</a>'& _
'</a>'& _
'<wbr/>'& _
'</p>'

Dim $htmlUrl = StringRegExp($SR, '(项目[^&]+)|http://[^"]+',3)
_ArrayDisplay($htmlUrl, UBound($htmlUrl))



#include <Array.au3>

Dim $SR = '<p><b fromubb="1"><font size="2">        项目地址:北京市顺义区­</font>'& _
'<p><font size="2">  项目占地:总用地364亩(约24万平米)­</font></p>'& _
'<p><a href="http://www.chla.com.cn/upload/0517146281.jpg#" target="_blank">' & _
'<a href="http://b40.p.com/http_d.cgi?/rurl4_b=79e8131e6cfa4f&a=33&b=40" appendurl="1" target="_blank">'& _
'<img alt="图片" appendurl="1" border="0" src="http://b40.q.com/http_d.cgi?/rurl4_b=79eadfa4f&a=33&b=40" />'& _
'</a>'& _
'</a>'& _
'<wbr/>'& _
'</p>'

Dim $htmlUrl = StringRegExp($SR, '(项目[^&]+)|http://.*?jpg[^"]+',3)
_ArrayDisplay($htmlUrl, UBound($htmlUrl))

 楼主| 发表于 2013-5-30 14:07:05 | 显示全部楼层
呵呵,越来越简洁了,学习中
 楼主| 发表于 2013-5-31 10:30:41 | 显示全部楼层
本帖最后由 lxsky 于 2013-5-31 10:32 编辑

可是出现1楼情况的原因是什么呢?????我试了一下只要涉及类似()|()的情况就会在后面()取得的数组里面间隔出现空数组
发表于 2013-5-31 11:53:18 | 显示全部楼层
回复 5# lxsky
你试试下面两个正则就明白多了的那两个是啥了
|//([0-9a-z/\._=\?#;&]+)"
>([^<\n]+)<|
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-18 13:10 , Processed in 0.082246 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表