2012-07-11 89 views
0

我目前正在写一个excel宏,而且我有一些真正的麻烦与我的具体要求。正则表达式匹配任何IP不在内部范围内

我需要遍历细胞,发现这是不是在私人范围内的任何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。

+3

有些人在遇到问题时会想:“我知道,我会用正则表达式。”现在他们有两个问题。 – 2012-07-11 01:47:11

+0

什么是您的确切数据布局?更简单的方法可能是将IP地址提取为4列,然后测试每个部分是否位于范围内 – brettdj 2012-07-11 10:55:51

回答

0

以下正则表达式代码应该可以帮到你。如果输入了有效的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} 

这就是说,正如评论所建议的,正则表达式可能不是解决此问题的最佳方法。如果你想使用它们,上面是一个你可以用正则表达式来完成的方法,但是正如前面提到的那样有限制。

+0

如果IP以十六进制形式表示,那么这当然不是一件坏事,或者如果以二进制形成。 – nhahtdh 2012-07-11 01:57:13

+0

但这仍然不包括IPv6。 :-) – MRAB 2012-07-11 02:01:14

+0

从我可以看到这似乎匹配私人IP,所以如果没有找到匹配,我会知道该单元格有一个外部IP地址。但是我遇到的问题是单元中可能有多个IP地址。所以我真的需要突出显示只有当它有一个外部IP地址,而不是上面提到的方法。任何人都有更好的方式来做到这一点? – hireSwish 2012-07-11 03:10:03

相关问题