找回密码
 加入
搜索
查看: 3885|回复: 7

[效率算法] 关于正则同时获取多个数组的问题,求指教。

  [复制链接]
发表于 2013-5-13 09:21:02 | 显示全部楼层 |阅读模式
<div id="" class="">
                <table align="center" width="1040" border="0" cellpadding="0" cellspacing="0" style="border-width:0px;">
                  <tr valign="top">
                        <td width="50%" style="border-width:0px;">
                        
                                <table border="0" cellpadding="2" cellspacing="0" style="table-layout: fixed;">
                                  <tr>
                                        <td style="width:400px;"><b>商品名称</b></td>
                                        <td style="width:100px;"><b>价格</b></td>
                                  </tr>

                                                                                                      <tr>
                                        <td class="first-cell" title="ID: 2568 | 货号: INH002568"><div style="width:400px;height:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">商品名称1</div></td>
                                        <td align="right">
                                                1111.00                                                <span class="noprint">
                                                <a href="javascript:addToCart('2568');"><img src="themes/hope2013/images/btn_cart.gif" width="21" height="18" border="0" align="absmiddle" /></a>
                                                <span>
                                        </td>
                                  </tr>
                                                                                                                                                                                                            <tr>
                                        <td class="first-cell" title="ID: 2459 | 货号: INH002459"><div style="width:400px;height:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">商品名称2</div></td>
                                        <td align="right">
                                                2222.00                                                <span class="noprint">
                                                <a href="javascript:addToCart('2459');"><img src="themes/hope2013/images/btn_cart.gif" width="21" height="18" border="0" align="absmiddle" /></a>
                                                <span>
                                        </td>
                                  </tr>
</table>
</div>
$marray = StringRegExp($data, '<(?i)td.*?ID: (\d{1,8}).*?><(?i)div.*?>(.*?)</(?i)div>', 3)
我本意是获取商品的“ID”和“商品名称”,上面这段正则在Au3.REHelper里测试也能获取到,但是在Autoit里总是提示无效的数组。我也不知道哪里出错了,求大神指教。
发表于 2013-5-13 09:54:31 | 显示全部楼层
#include <array.au3>
Dim $data = '<div id="" class="">' & @CRLF & _
                '<table align="center" width="1040" border="0" cellpadding="0" cellspacing="0" style="border-width:0px;">' & @CRLF & _
                '<tr valign="top">' & @CRLF & _
                ' <td width="50%" style="border-width:0px;">' & @CRLF & _
                '   <table border="0" cellpadding="2" cellspacing="0" style="table-layout: fixed;">' & @CRLF & _
                '     <tr>' & @CRLF & _
                '        <td style="width:400px;"><b>商品名称</b></td>' & @CRLF & _
                '          <td style="width:100px;"><b>价格</b></td>' & @CRLF & _
                '   </tr>' & @CRLF & _
                '                      <tr>' & @CRLF & _
                '       <td class="first-cell" title="ID: 2568 | 货号: INH002568"><div style="width:400px;height:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">商品名称1</div></td>' & @CRLF & _
                '      <td align="right">' & @CRLF & _
                '             1111.00                                                <span class="noprint">' & @CRLF & _
                '               <a href="' & "javascript:addToCart('" & " 2568'" & ');"><img src="themes/hope2013/images/btn_cart.gif" width="21" height="18" border="0" align="absmiddle" /></a>' & @CRLF & _
                '             <span>' & @CRLF & _
                '     </td>' & @CRLF & _
                '  </tr>' & @CRLF & _
                '<tr>' & @CRLF & _
                '      <td class="first-cell" title="ID: 2459 | 货号: INH002459"><div style="width:400px;height:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">商品名称2</div></td>' & @CRLF & _
                '   <td align="right">' & @CRLF & _
                '               2222.00                                                <span class="noprint">' & @CRLF & _
                '       <a href="' & "javascript:addToCart('" & "  2459'" & ');"><img src="themes/hope2013/images/btn_cart.gif" width="21" height="18" border="0" align="absmiddle" /></a>' & @CRLF & _
                '          <span>' & @CRLF & _
                '     </td>' & @CRLF & _
                '  </tr>' & @CRLF & _
                '</div>' & @CRLF & _
                '</table>'
$marray = StringRegExp($data, 'ID.*?(\d{1,8}).*;">(.*?)<', 3)
_ArrayDisplay($marray)
发表于 2013-5-13 11:39:50 | 显示全部楼层
貌似很复杂
发表于 2013-5-13 12:38:07 | 显示全部楼层
回复 1# 东风破


   你的正则已能匹配出结果, 但个人认为可以再简化点:

(?i)ID:\h*(\d{1,8})[^<>]+><[^<>]+>(.*?)</div>
 楼主| 发表于 2013-5-13 15:14:11 | 显示全部楼层
回复 2# haijie1223
嗯,谢谢,我回去试一下。再
 楼主| 发表于 2013-5-13 15:18:41 | 显示全部楼层
回复 2# haijie1223


    我想再请教一下,为什么msgbox(0,"data",$myarray[0])总是会出错呢?
发表于 2013-5-13 16:48:24 | 显示全部楼层
回复 6# 东风破


    应该不会报错吧,把你的报错信息发上来看下。
 楼主| 发表于 2013-5-13 20:25:41 | 显示全部楼层
回复 7# haijie1223
真是谢谢你!从你写的里面我学到很多。问题已经发现了,之前获取网页源码使用的是_IEBodyReadHTML的方式,突发奇想换成_INetGetSource的方式代码就运行正确了!过会再研究下两者到底什么区别。谢谢
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 15:47 , Processed in 0.090934 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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