中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: VBS正则提取源文件指定内容 上一主题 | 下一主题
lisyofun
初级用户





积分 87
发帖 61
注册 2008-9-18
状态 离线
『楼 主』:  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


2009-9-9 21:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qinchun36
高级用户

据说是李先生


积分 609
发帖 400
注册 2008-4-23
状态 离线
『第 2 楼』:  


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


2009-9-9 23:21
查看资料  发送邮件  发短消息 网志  OICQ (182484135)  编辑帖子  回复  引用回复
lisyofun
初级用户





积分 87
发帖 61
注册 2008-9-18
状态 离线
『第 3 楼』:  

为什么是显示的最后一条留言呢?

2009-9-10 18:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qinchun36
高级用户

据说是李先生


积分 609
发帖 400
注册 2008-4-23
状态 离线
『第 4 楼』:  

“我想用vbs提取最近一条留言” ,最近不就是最后发表!

2009-9-10 22:28
查看资料  发送邮件  发短消息 网志  OICQ (182484135)  编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 5 楼』:  


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




49206C6F766520796F752067757973 54656C3A3133383238343036373837
2009-9-11 04:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lisyofun
初级用户





积分 87
发帖 61
注册 2008-9-18
状态 离线
『第 6 楼』:  

是除了公告外的第一条留言,不好意思,是我没表达清楚。

2009-9-11 13:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lisyofun
初级用户





积分 87
发帖 61
注册 2008-9-18
状态 离线
『第 7 楼』:  

谢谢everest79,原来还能这样啊。。学习中

2009-9-11 13:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cike09
新手上路





积分 17
发帖 11
注册 2009-9-12
来自 宇宙·······禹州
状态 离线
『第 8 楼』:  

晕晕晕~~~~~~~~~~~~~~~~~

   此帖被 -1 点积分    点击查看详情   
评分人:【 523066680 分数: -1  时间:2009-9-12 05:44


2009-9-12 04:52
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (1144733571)  编辑帖子  回复  引用回复
lisyofun
初级用户





积分 87
发帖 61
注册 2008-9-18
状态 离线
『第 9 楼』:  

怎样才只提取指定的某一条内容呢。。同时匹配的太多了,我只想要某一条该怎么做呢

2009-9-13 14:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
asnahu
初级用户





积分 99
发帖 53
注册 2006-8-18
状态 离线
『第 10 楼』:  

everest79的代码看不懂啊,能否讲解一下

2009-10-3 15:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 11 楼』:  

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



49206C6F766520796F752067757973 54656C3A3133383238343036373837
2009-10-3 18:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
asnahu
初级用户





积分 99
发帖 53
注册 2006-8-18
状态 离线
『第 12 楼』:  

document.anchors果然很强大^^

谢谢答复,节日快乐~!

2009-10-3 19:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: