标题: VBS正则提取源文件指定内容
[打印本页]
作者: lisyofun
时间: 2009-9-9 21:30
标题: VBS正则提取源文件指定内容
这里是源文件
http://upload.cn-dos.net/img/1682.txt
我想用vbs提取最近一条留言的用户名,标题,留言时间,留言IP。
但我只能提取用户名的内容,其它的不知道如何提取,请各位大侠帮忙。
源文件里前面的三条留言是公告,以后可能会继续添加公告,所以提取的内容要跳过它。
以下是我写的提取用户名的vbs.
wscript.echo "用户名是:" & RegExpTest("<li class=""userName"">([^<]*)</li>",ReadText("sourcefile.txt"))
Function RegExpTest(Patrn,strng)
Set RegEx1=New RegExp
RegEx1.Pattern = Patrn
RegEx1.IgnoreCase=True
RegEx1.Global=Fasle
Set Matches =RegEx1.Execute(strng)
For Each Match In Matches
i=i+1
RetStr=RetStr & Match.SubMatches(0)
If i Mod 2 = 0 Then
RetStr=RetStr & vbCrLf
End If
Next
RegExpTest=RetStr
End Function
Function ReadText(FilePath)
Dim Fso,Rso
Set Fso=CreateObject("Scripting.FileSystemObject")
Set Gso=Fso.GetFile(FilePath)
Set Rso=Gso.OpenAsTextStream(1)
ReadText=Rso.ReadAll
End Function
作者: qinchun36
时间: 2009-9-9 23:21
Dim sourceStrng, regUserName, regMsgTitle, regMsgTime, regIP
sourceStrng = ReadText("sourcefile.txt")
regUserName = "[.\s]*\"&chr(34)&"userName\"&chr(34)&">(.*)</li>[.\s]*"
regMsgTitle = "[.\s]*\"&chr(34)&"msgTitle\"&chr(34)&".*<h3>(.*)</h3></div>[.\s]*"
regMsgTime = "[.\s]*\"&chr(34)&"msgTime\"&chr(34)&".*>(.*)</div>[.\s]*"
regIP = "[.\s]*留言IP\D*(\d+\.\d+\.\d+\.\d+)[.\s]*"
wscript.echo _
"用户名: " & vbtab & RegExpTest(regUserName,sourceStrng) & vbcrlf &_
"留言标题: " & vbtab & RegExpTest(regMsgTitle,sourceStrng) & vbcrlf &_
"留言时间: " & vbtab & RegExpTest(regMsgTime,sourceStrng) & vbcrlf &_
"留言IP: " & vbtab & RegExpTest(regIP,sourceStrng)
Function RegExpTest(Patrn,strng)
Dim RetStr
Set RegEx1=New RegExp
RegEx1.Pattern = Patrn
RegEx1.IgnoreCase=True
RegEx1.Global=True
Set Matches =RegEx1.Execute(strng)
For Each Match In Matches
RetStr = Match.SubMatches(0)
Next
RegExpTest=RetStr
End Function
Function ReadText(FilePath)
Dim Fso,Rso
Set Fso=CreateObject("Scripting.FileSystemObject")
Set Gso=Fso.GetFile(FilePath)
Set Rso=Gso.OpenAsTextStream(1)
ReadText=Rso.ReadAll
End Function
作者: lisyofun
时间: 2009-9-10 18:56
为什么是显示的最后一条留言呢?
作者: qinchun36
时间: 2009-9-10 22:28
“我想用vbs提取最近一条留言” ,最近不就是最后发表!
作者: everest79
时间: 2009-9-11 04:41
Dim ie
Set ie = CreateObject("InternetExplorer.Application")
ie.NaviGate "C:\Documents and Settings\Administrator\桌面\fd.htm"
For Each Aelement In ie.document.anchors '可描述A标签集合
If Aelement.id > msgindex Then '比较A标签描述
msgindex = Aelement.id '记录更大的msgid
Set objele = Aelement '记录msgid最大的A对象
End If
Next
msgbox objele.childNodes(0).outertext '显示被纪录的A对象的下级文本
ie.quit '退出ie
Set ie = Nothing
作者: lisyofun
时间: 2009-9-11 13:09
是除了公告外的第一条留言,不好意思,是我没表达清楚。
作者: lisyofun
时间: 2009-9-11 13:11
谢谢everest79,原来还能这样啊。。学习中
作者: cike09
时间: 2009-9-12 04:52
晕晕晕~~~~~~~~~~~~~~~~~
作者: lisyofun
时间: 2009-9-13 14:59
怎样才只提取指定的某一条内容呢。。同时匹配的太多了,我只想要某一条该怎么做呢
作者: asnahu
时间: 2009-10-3 15:35
everest79的代码看不懂啊,能否讲解一下
作者: everest79
时间: 2009-10-3 18:21
Dim ie
Set ie = CreateObject("InternetExplorer.Application")
ie.NaviGate "C:\Documents and Settings\Administrator\桌面\fd.htm"
'加载需要解析的网页
For Each Aelement In ie.document.anchors '可描述A标签集合 ie.document.anchors 表示文档中<a id="msg****">的集合,然后使用for each枚举这个集合,临时对象为Aelement
If Aelement.id > msgindex Then '比较A标签描述 Aelement.id的值就是<a id="msg***">中的msg***
msgindex = Aelement.id '记录更大的msgid
Set objele = Aelement '记录msgid最大的A对象
End If
Next
msgbox objele.childNodes(0).outertext '显示被纪录的A对象的下级文本childNodes是当前对象objele所有子对象集合,以数组方式访问(0)就是第一个子对象,<a id="msg***">下只有一个对象就是<div class="msgArea">,此时使用outertext输出了这个div内的所有文本内容
<a id="msg***">
<div class="msgArea">
dfdsadf
</div>
ie.quit '退出ie
Set ie = Nothing
作者: asnahu
时间: 2009-10-3 19:17
document.anchors果然很强大^^
谢谢答复,节日快乐~!