正则表达式匹配任何不在内部范围内的IP

时间:2012-07-11 01:34:36

标签: regex vba

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

1 个答案:

答案 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}

也就是说,正如评论所说,正则表达式可能不是解决此问题的最佳方法。如果你想使用正则表达式,上面是一种你可以用它做的方法,但如上所述,它有局限性。