找回密码
 加入
搜索
查看: 1552|回复: 9

正則表達試求助

[复制链接]
发表于 2009-3-9 14:55:23 | 显示全部楼层 |阅读模式
我根據網頁寫一個正則表達式提取日期和數字,可是始終沒有顯示出來,可以幫我看看哪裡出了問題嗎?
#include <ie.au3>
#include <INet.au3>
$oIE=_INetGetSource("http://fund.cnyes.com/fund_nav.asp?fundcode=B09%2C001&sdate=20050501&edate=20050531&Submit=%ACd%B8%DF")
Local $SHOW = ''

While 1
        $Strings1=StringRegExp($oIE, "<td align=center>(.*?)</td>", 3)
        If @error = 0 Then
        $Offset1 = @extended
    Else
        ExitLoop
    EndIf
    $SHOW &= $Strings1[0]& @CRLF
WEnd
MsgBox(0,"Message", $SHOW)


[ 本帖最后由 fancky 于 2009-3-10 17:08 编辑 ]
发表于 2009-3-9 15:30:45 | 显示全部楼层
试试这个看看行不行.... 我这里测试可以用....
#include 
#include 
$oIE=_INetGetSource("http://fund.cnyes.com/fund_nav.asp?fundcode=B09%2C001&sdate=20050501&edate=20050531&Submit=%ACd%B8%DF")
$Strings1=StringRegExp($oIE, "(?<=align=center>).*?(?=[/td])", 3)
$Strings2=UBound ($Strings1,1)-5
For $i=0 To $Strings2 Step 2
FileWrite ("test4.txt",$Strings1[$i] & @TAB & $Strings1[$i+1] & @CRLF)
Next
发表于 2009-3-9 15:41:15 | 显示全部楼层
#include <Inet.au3>

Local $url = "http://fund.cnyes.com/fund_nav.asp?fundcode=B09%2C001&sdate=20050501&edate=20050531&Submit=%ACd%B8%DF"
Local $str = _InetGetSource($url), $srePattern = "<td align=center>(?U)(.*)(?<! )</td>", $result, $var

$var = StringRegExp($str, $srePattern, 3)
For $o = 0 to Ubound($var) - 1
        $result &= $var[$o] & @tab
        If mod($o, 2) then $result &= @crLf
Next
msgBox(0, '', $result)

评分

参与人数 1金钱 +5 收起 理由
ceoguang + 5 我很赞同

查看全部评分

 楼主| 发表于 2009-3-10 09:15:40 | 显示全部楼层
很奇怪,我在我的電腦使用_InetGetSource的方式來獲得原始碼一樣是出現空白沒有任何東西只有在桌面的右下角有出現AutoIt的運行符號,因此我另外嘗試使用_IEDocReadHTML的方式來獲得,結果是可以運行,但是始終抓不到數值,是哪裡出問題嗎?
#include <IE.au3>
#include <Inet.au3>
$URL = 'http://fund.cnyes.com/fund_nav.asp?fundcode=B09%2C001&sdate=20050501&edate=20050531&Submit=%ACd%B8%DF/'
$oIE = _IECreate($URL, 0, 1, 1, 0)
$String = _IEDocReadHTML($oIE)
Local $Offset1 = 1,$SHOW = ''
While 1
$var = StringRegExp($String, '<td align=center>(?U)(.*)(?<! )</td>',3,$Offset1)
    If @error = 0 Then
        $Offset1 = @extended
    Else
        ExitLoop
    EndIf
        $SHOW &= $var[0] & "        " &@CRLF
WEnd
MsgBox(0,"數值", $SHOW)


[ 本帖最后由 fancky 于 2009-3-10 11:36 编辑 ]
发表于 2009-3-10 14:25:05 | 显示全部楼层

#include <IE.au3>
$URL = 'http://fund.cnyes.com/fund_nav.asp?fundcode=B09%2C001&sdate=20050501&edate=20050531&Submit=%ACd%B8%DF/'
$oIE = _IECreate($URL, 0, 1, 1, 0)
$String = _IEDocReadHTML($oIE)
;$String=StringRegExpReplace ($String, "\r\n", "")
$array= StringRegExp($String,'<TD align=middle>(?U)(\d.*)</TD>', 3)
for $i = 0 to UBound($array) - 1
        msgbox(0, "结果为" & $i, $array[$i])
Next
 楼主| 发表于 2009-3-10 14:43:25 | 显示全部楼层
可以運作抓出數值了,不過我有疑問,為什麼bob大大的正則是寫成:<TD align=middle>(?U)(\d.*)</TD>,差別在<TD align=middle>,我原本表示的方法是不能用嗎?

[ 本帖最后由 fancky 于 2009-3-10 14:44 编辑 ]
发表于 2009-3-10 15:44:16 | 显示全部楼层
.*?
===>
\d.*
 楼主| 发表于 2009-3-10 17:08:06 | 显示全部楼层
恩恩,OK,我再來看看,謝謝了
发表于 2009-3-10 17:26:35 | 显示全部楼层
你将_IEDocReadHTML读取到的源代码写到文本里看看
就清除了问什么是<TD align=middle>了
发表于 2009-3-12 19:38:29 | 显示全部楼层
我用这种方法:

#include <INet.au3>
$url = "http://fund.cnyes.com/fund_nav.asp?fundcode=B09%2C001&sdate=20050501&edate=20050531&Submit=%ACd%B8%DF/"
$sHTML = _INetGetSource($url)
$aid = StringRegExp($sHTML, "<td align=center>(.*?)</td>", 3)
For $i = 0 To UBound($aid) - 1
        ConsoleWrite($i & "--" & $aid[$i] & @CRLF)
Next
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-16 15:46 , Processed in 0.081870 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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