标题: [问题求助] 求助,vbs用正则表达式匹配提取IP地址出现错误。 [打印本页]
作者: Cameron 时间: 2012-9-25 19:05 标题: 求助,vbs用正则表达式匹配提取IP地址出现错误。
本帖最后由 Cameron 于 2012-9-25 19:34 编辑
脚本代码如下:- dim fso,otf,regEx,Matches ' 建立变量。
- set fso=createobject("scripting.filesystemobject")
- set otf=fso.OpenTextFile(WScript.Arguments(0),1,False) ' 打开拖动到脚本上的文件。
- 'Set regEx = New RegExp ' 建立正则表达式对象。
- Set regex = CreateObject("VBScript.RegExp") ' 建立正则表达式对象。
- regEx.Pattern = "([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])" ' 设置匹配IP地址的模式。
- regEx.IgnoreCase = True ' 设置是否区分大小写。
- regEx.Global = True ' 设置全程可用性。
- Set Matches = regEx.Execute(otf.readall) ' 执行搜索。
- set fso=createobject("scripting.filesystemobject")
- set wrtxtfl=fso.openTextFile(CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.Arguments(0))&"\IPlist"&FormatDateTime(date,1)&join(split(time,":",-1),":")&".txt",8,true) ' 创建并以写模式打开目标文件同目录下的以“IPlist当前日期时间.txt”为文件名的文件。
- for each match in matches ' 逐个元素读取通过正则匹配提取IP地址得到的数组。
- wrtxtfl.writeline match ' 将数组元素逐行写入文件。
- next
复制代码
目标文件如下:- 非权威应答:
-
- 服务器: UnKnown
- Address: [color=Red]222.222.222.222[/color]
-
- 名称: www.a.shifen.com
- Addresses: 119.75.217.56
- 119.75.218.77
- Aliases: www.baidu.com
-
- 非权威应答:
-
- 服务器: UnKnown
- Address: 222.222.222.222
-
- 名称: static.n.shifen.com
- Addresses: 180.149.132.72
- 220.181.163.18
- Aliases: eiv.baidu.com
-
- 非权威应答:
-
- 服务器: UnKnown
- Address: 222.222.222.222
-
- 名称: hm.e.shifen.com
- Address: 220.181.112.34
- Aliases: hm.baidu.com
-
- 非权威应答:
-
- 服务器: UnKnown
- Address: 222.222.222.222
-
- 名称: www.qq.com
- Addresses: 2402:4e00::b
- 2402:4e00::11
- 2402:4e00::a
- 220.181.138.59
-
- 非权威应答:
-
- 服务器: UnKnown
- Address: 222.222.222.222
-
- 名称: www.tencent.com
- Address: 121.14.98.70
-
- 非权威应答:
-
- 服务器: UnKnown
- Address: 222.222.222.222
-
- 名称: 163.xdwscache.glb0.lxdns.com
- Address: 183.60.136.64
- Aliases: www.163.com
- www.cache.wangsu.netease.com
- www.163.com.lxdns.com
- www.163.z.lxdns.com
-
- 非权威应答:
-
- 服务器: UnKnown
- Address: 222.222.222.222
-
- 名称: almack.sina.com.cn
- Address: [color=Red]218.30.108.232[/color]
- Aliases: www.sina.com
- us.sina.com.cn
- news.sina.com.cn
- jupiter.sina.com.cn
-
- 非权威应答:
-
- 服务器: UnKnown
- Address: 222.222.222.222
-
- 名称: fzw.a.sohu.com
- Addresses: 220.181.26.7
- 220.181.118.87
- Aliases: www.sohu.com
- gs.a.sohu.com
复制代码
运行结果如下:- [color=Red]222.222.222.22[/color]
- 119.75.217.56
- 119.75.218.77
- 222.222.222.22
- 180.149.132.72
- 220.181.163.18
- 222.222.222.22
- 220.181.112.34
- 222.222.222.22
- 220.181.138.59
- 222.222.222.22
- 121.14.98.70
- 222.222.222.22
- 183.60.136.64
- 222.222.222.22
- [color=Red]218.30.108.23[/color]
- 222.222.222.22
- 220.181.26.7
- 220.181.118.87
复制代码
上面目标文件及运行结果中的颜色标记是为方便大家查看错误后来加上的,原本没有。
目标文件中IP地址的最后一组数字有些原本是三位(比如222.222.222.222),在处理结果中都变成了两位(比如222.222.222.22),是哪里出错了?请各位指正!
作者: CrLf 时间: 2012-9-25 20:01
限定一个单词边界就行了,用 \W 或 \b 都行- Set fso = CreateObject("scripting.filesystemobject")
- text = fso.OpenTextFile("a.txt",1).ReadAll
-
- Set re = New RegExp
- re.Global = True
- re.IgnoreCase = True
- re.MultiLine = True
-
- key = "(?:1?\d?\d|2[0-4]\d|25[0-5])"
- re.Pattern = "\b" & key & "\." & key & "\." & key & "\." & key & "\b"
-
- set ex = re.Execute(text)
- For Each e In ex
- str = str & e & vbCrLf
- Next
- WScript.Echo str
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |