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

Regex 正则表达式匹配任何不在内部范围内的IP,regex,vba,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

我目前正在编写一个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代码没有任何问题,只是模式有问题

我真的很想请一位regexp专家帮忙

单元格的格式如下所示,例如:

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

下面的正则表达式代码应该可以帮助您。如果输入了有效的IP地址,它将匹配不在专用范围内的IP地址。然而,它不能确定IP地址是否有效(例如,它可能匹配192.168.864.543)。可以修改它来解决这个问题,但由于regex的工作是字符串而不是数字,所以它更难

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}

也就是说,正如一条评论所指出的,正则表达式可能不是解决这个问题的最佳方法。以上是一种使用正则表达式的方法,如果您想使用它们,但正如前面提到的,它也有局限性。

有些人在遇到问题时会认为“我知道,我会使用正则表达式。”现在他们有两个问题。您的确切数据布局是什么?更简单的方法可能是将IP地址提取到4列中,然后测试每个部分是否在范围内如果IP以十六进制形式表示肯定不是一件坏事,如果IP以二进制形式表示则更好。但这仍然不包括IPv6.:-)据我所见,这似乎与私有IP相匹配,因此如果没有找到匹配项,我就知道该单元有一个外部IP地址。然而,我遇到的问题是,单元中可能有多个IP地址。因此,我真的需要强调只有当它有一个外部IP地址,而不是上面提到的方法。有谁有更好的方法吗?你能举个例子说明每个单元格的格式吗?