lxsky 发表于 2013-5-30 12:00:02

又是正则

本帖最后由 lxsky 于 2013-5-30 12:07 编辑

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

Dim $SR = '<p><b fromubb="1"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 项目地址:北京市顺义区&shy;</font>'& _
'<p><font size="2">  项目占地:总用地364亩(约24万平米)&shy;</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&amp;a=33&amp;b=40" appendurl="1" target="_blank">'& _
'<img alt="图片" appendurl="1" border="0" src="http://b40.q.com/http_d.cgi?/rurl4_b=79eadfa4f&amp;a=33&amp;b=40" />'& _
'</a>'& _
'</a>'& _
'<wbr/>'& _
'</p>'

Dim $htmlUrl = StringRegExp($SR, '>([^<\n]+)<|//+"',3)      ;<========A
;Dim $htmlUrl = StringRegExp($SR, '>([^<\n]+)<|//(+)"',3)   ;<========B
_ArrayDisplay($htmlUrl, UBound($htmlUrl))


#CS

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

   
   B的结果
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 项目地址:北京市顺义区&shy;
     项目占地:总用地364亩(约24万平米)&shy;
   
   www.chla.com.cn/upload/0517146281.jpg#
   
   b40.p.com/http_d.cgi?/rurl4_b=79e8131e6cfa4f&amp;a=33&amp;b=40
   
   b40.q.com/http_d.cgi?/rurl4_b=79eadfa4f&amp;a=33&amp;b=40
#CE

flyeblue 发表于 2013-5-30 12:15:16

本帖最后由 flyeblue 于 2013-5-30 12:17 编辑

url的正则表达式\<a\shref="([^"]+)" img标签的正则表达式<img[^/]+\ssrc="([^"]+)" 这样就可以获得所有链接
至于图片第一个需要再次分析
另外用_IELinkGetCollection()要更简单方便啊

lixiaolong 发表于 2013-5-30 13:53:14

本帖最后由 lixiaolong 于 2013-5-30 13:58 编辑

#include <Array.au3>

Dim $SR = '<p><b fromubb="1"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 项目地址:北京市顺义区&shy;</font>'& _
'<p><font size="2">  项目占地:总用地364亩(约24万平米)&shy;</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&amp;a=33&amp;b=40" appendurl="1" target="_blank">'& _
'<img alt="图片" appendurl="1" border="0" src="http://b40.q.com/http_d.cgi?/rurl4_b=79eadfa4f&amp;a=33&amp;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">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 项目地址:北京市顺义区&shy;</font>'& _
'<p><font size="2">  项目占地:总用地364亩(约24万平米)&shy;</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&amp;a=33&amp;b=40" appendurl="1" target="_blank">'& _
'<img alt="图片" appendurl="1" border="0" src="http://b40.q.com/http_d.cgi?/rurl4_b=79eadfa4f&amp;a=33&amp;b=40" />'& _
'</a>'& _
'</a>'& _
'<wbr/>'& _
'</p>'

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

lxsky 发表于 2013-5-30 14:07:05

呵呵,越来越简洁了,学习中

lxsky 发表于 2013-5-31 10:30:41

本帖最后由 lxsky 于 2013-5-31 10:32 编辑

可是出现1楼情况的原因是什么呢?????我试了一下只要涉及类似()|()的情况就会在后面()取得的数组里面间隔出现空数组

flyeblue 发表于 2013-5-31 11:53:18

回复 5# lxsky
你试试下面两个正则就明白多了的那两个是啥了|//(+)"
>([^<\n]+)<|
页: [1]
查看完整版本: 又是正则