Regex:如何匹配RFC1918私有IPV4地址范围中的IP地址(在Python中)?

时间:2015-06-05 20:01:39

标签: python regex

RFC1918将私有IPv4地址定义为属于以下任何范围内的私有IPv4地址:

10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255

我将127.0.0.1添加到此列表中,以便进行分析。我知道有经过试验和测试的正则表达式可以匹配任何IPv4地址,但是只有当地址属于上述范围之一或127.0.0.1时,如何将其中一个缩小为匹配?将使用Python。

非常感谢

3 个答案:

答案 0 :(得分:5)

在Python 3.3+中(你没有指定一个版本,也没有为什么要使用正则表达式,所以为了完整性我会把它放在这里),你可以:

import ipaddress

addr_string = # string with your IP address
try:
    addr = ipaddress.IPv4Address(addr_string)
except ValueError:
    raise # not an IP address
if addr.is_private:
    pass # is a private address

另请参阅:ipaddress module documentation

答案 1 :(得分:3)

以下正则表达式应该有效:

# You can avoid `N + 1`
User.includes(:account).limit(50).each { |u| puts u.name }

DEMO

答案 2 :(得分:0)

(?:(?:192\.)(?:(?:168\.)(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.)(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:10\.)(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){2}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(?:(?:172\.)(?:(?:1[6-9]|2[0-9]|3[0-1])\.)(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.)(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))

此正则表达式用于从字符串中获取所有私有ip。可以找到演示here