yigao 发表于 2009-10-7 13:54:17

为什么正则匹配不成功?

本帖最后由 yigao 于 2009-10-7 15:59 编辑

想将类似下面网页源文件中的投票问题列表抓出来,但使用正则匹配总是不成功。
http://ask.koubei.com/dir/vote_ans.html
先看看代码:#include <file.au3>
#include <INet.au3>
#include <File.au3>

InetGet ("http://ask.koubei.com/dir/vote_ans.html","d:\My AutoIt\temp1.txt")
$file = FileRead("d:\My AutoIt\temp1.txt")
$file = BinaryToString($file,4)
_FileCreate("d:\My AutoIt\temp.txt")
FileWrite("d:\My AutoIt\temp.txt",$file)
FileDelete("d:\My AutoIt\temp1.txt")
Dim $aRecords
If Not _FileReadToArray("d:\My AutoIt\temp.txt",$aRecords) Then
   MsgBox(4096,"", " Error reading:" & @error)
   Exit
EndIf
For $x = 1 to $aRecords
   $array=StringRegExp($aRecords[$x], '/question/\d{13}.html', 1)
Next
FileDelete("d:\My AutoIt\temp.txt")因为源文件中存在多个/question/\d{13}.html的内容,想一次性抓出来。但下面这句
$array=StringRegExp($aRecords[$x], '/question/\d{13}.html', 1)
得到的实际结果只有一个,仿佛的到的不是数组。不知道为什么。
曾经尝试用filereadline将文件逐行读入然后正则,也没得到所要求的结果。
请教解决办法,谢谢!

bing614 发表于 2009-10-7 14:31:59

#include <INet.au3>
#include <array.au3>
$temp=_INetGetSource ("http://ask.koubei.com/dir/vote_ans.html")
$temp=StringSplit($temp,@CRLF)
For $i=1 To $temp
        If Not StringInStr($temp[$i],"/question/") Then ContinueLoop
        $Rul=StringRegExp($temp[$i],"/question/\d{13}\.html",1)
        If @error<>0 Then ContinueLoop
        FileWriteLine("url.txt",$Rul)
Next试下这样

顽固不化 发表于 2009-10-7 14:43:55

#include <INet.au3>
InetGet ("http://ask.koubei.com/dir/vote_ans.html","d:\My AutoIt\temp1.txt")
$file = FileRead("d:\My AutoIt\temp1.txt")
$array=StringRegExp($file, '/question/\d{13}.html', 3)
FileDelete("d:\My AutoIt\temp1.txt")
for $i=0 to UBound($array)-1
        MsgBox(0,0,$array[$i],2)
Next

yigao 发表于 2009-10-7 15:58:48

感谢两位,都验证通过了。

superkan 发表于 2010-3-30 07:59:20

高手的代码看得很舒服
页: [1]
查看完整版本: 为什么正则匹配不成功?