中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-12 12:07
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » VBS正则提取源文件指定内容 查看 1,212 回复 11
楼 主 VBS正则提取源文件指定内容 发表于 2009-09-09 21:30 ·  中国 湖南 郴州 电信
初级用户
★★
积分 87
发帖 61
注册 2008-09-18 11:32
17年会员
UID 125941
性别 男
状态 离线
这里是源文件
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
2 发表于 2009-09-09 23:21 ·  中国 天津 联通
高级用户
★★★
据说是李先生
积分 609
发帖 400
注册 2008-04-23 15:55
18年会员
UID 116706
性别 男
状态 离线

Dim sourceStrng, regUserName, regMsgTitle, regMsgTime, regIP

sourceStrng = ReadText("sourcefile.txt")
regUserName = "*\"&chr(34)&"userName\"&chr(34)&">(.*)</li>*"
regMsgTitle = "*\"&chr(34)&"msgTitle\"&chr(34)&".*<h3>(.*)</h3></div>*"
regMsgTime = "*\"&chr(34)&"msgTime\"&chr(34)&".*>(.*)</div>*"
regIP = "*留言IP\D*(\d+\.\d+\.\d+\.\d+)*"

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
3 发表于 2009-09-10 18:56 ·  中国 湖南 郴州 电信
初级用户
★★
积分 87
发帖 61
注册 2008-09-18 11:32
17年会员
UID 125941
性别 男
状态 离线
为什么是显示的最后一条留言呢?
4 发表于 2009-09-10 22:28 ·  中国 天津 联通
高级用户
★★★
据说是李先生
积分 609
发帖 400
注册 2008-04-23 15:55
18年会员
UID 116706
性别 男
状态 离线
“我想用vbs提取最近一条留言” ,最近不就是最后发表!
5 发表于 2009-09-11 04:41 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线

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
6 发表于 2009-09-11 13:09 ·  中国 湖南 郴州 电信
初级用户
★★
积分 87
发帖 61
注册 2008-09-18 11:32
17年会员
UID 125941
性别 男
状态 离线
是除了公告外的第一条留言,不好意思,是我没表达清楚。
7 发表于 2009-09-11 13:11 ·  中国 湖南 郴州 电信
初级用户
★★
积分 87
发帖 61
注册 2008-09-18 11:32
17年会员
UID 125941
性别 男
状态 离线
谢谢everest79,原来还能这样啊。。学习中
8 发表于 2009-09-12 04:52 ·  中国 河南 许昌 禹州市 电信
新手上路
积分 17
发帖 11
注册 2009-09-12 01:24
16年会员
UID 151871
性别 男
来自 宇宙·······禹州
状态 离线
晕晕晕~~~~~~~~~~~~~~~~~
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
523066680 -1 2009-09-12 05:44
9 发表于 2009-09-13 14:59 ·  中国 湖南 郴州 电信
初级用户
★★
积分 87
发帖 61
注册 2008-09-18 11:32
17年会员
UID 125941
性别 男
状态 离线
怎样才只提取指定的某一条内容呢。。同时匹配的太多了,我只想要某一条该怎么做呢
10 发表于 2009-10-03 15:35 ·  中国 广西 南宁 西乡塘区 电信
初级用户
★★
积分 99
发帖 53
注册 2006-08-18 18:44
19年会员
UID 60809
状态 离线
everest79的代码看不懂啊,能否讲解一下
11 发表于 2009-10-03 18:21 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
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
12 发表于 2009-10-03 19:17 ·  中国 广西 南宁 西乡塘区 电信
初级用户
★★
积分 99
发帖 53
注册 2006-08-18 18:44
19年会员
UID 60809
状态 离线
document.anchors果然很强大^^

谢谢答复,节日快乐~!
论坛跳转: