东风破 发表于 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里总是提示无效的数组。我也不知道哪里出错了,求大神指教。

haijie1223 发表于 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)

zzbtlc 发表于 2013-5-13 11:39:50

貌似很复杂

user3000 发表于 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)总是会出错呢?

haijie1223 发表于 2013-5-13 16:48:24

回复 6# 东风破


    应该不会报错吧,把你的报错信息发上来看下。

东风破 发表于 2013-5-13 20:25:41

回复 7# haijie1223
真是谢谢你!从你写的里面我学到很多。问题已经发现了,之前获取网页源码使用的是_IEBodyReadHTML的方式,突发奇想换成_INetGetSource的方式代码就运行正确了!过会再研究下两者到底什么区别。谢谢
页: [1]
查看完整版本: 关于正则同时获取多个数组的问题,求指教。