0

我目前正在编写一个 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通过一个函数。

4

1 回答 1

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}

也就是说,正如评论所建议的那样,正则表达式可能不是解决此问题的最佳方法。如果您想使用正则表达式,上面是一种可以使用它们的方法,但如前所述,存在限制。

于 2012-07-11T01:48:13.643 回答