我目前正在编写一个excel宏,我遇到了一些真正的麻烦,我的具体要求。
我需要遍历单元格并找到不属于私有范围的任何IP地址,
10.0.0.0 – 10.255.255.255
172.16.0.0 – 172.31.255.255
192.168.0.0 – 192.168.255.255
我正在使用的代码:
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
With RE
.MultiLine = False
.Global = False
.IgnoreCase = True
.Pattern = ??
End With
VBA代码没有任何问题,仅使用模式。
真的很想要一个正则表达式的大师来帮忙!
单元格的格式如下:
192.168.1.1 (subnet name), 203.134.56.7 (third party unknown), 10.0.0.0/8 (voice subnet), 10.1.1.5 (voice server), 56.8.0.0/16 (google)
至于下面的评论,这就是为什么我正在寻找一个正则表达式解决方案,如果有一个,因为它意味着我可以在一个单元格上运行它,它应该仍然找到第三方IP作为分裂成一个数组,并通过一个函数运行每个IP。
答案 0 :(得分:0)
以下正则表达式代码可以帮助您解决问题。如果输入了有效的IP地址,它将匹配不在私有范围内的IP地址。但是,它不能确定IP地址是否有效(例如,它可以匹配192.168.864.543。)可以改变它以解决这个问题,但是由于正则表达式在字符串而不是数字上工作,因此更加困难。
10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}|172.([1][6-9]|[2][0-9]|[3][0-1])\.[0-9]{1,3}\.[0-9]{1,3}|192.168\.[0-9]{1,3}\.[0-9]{1,3}
也就是说,正如评论所说,正则表达式可能不是解决此问题的最佳方法。如果你想使用正则表达式,上面是一种你可以用它做的方法,但如上所述,它有局限性。