我有蜂巢表:
department ip
A 10.192.168.2
B 172.16.0.1
A 10.192.168.23
B 172.16.0.24
10.192.168.56
我想在ip列上使用正则表达式,以便仅获取如下ip范围内的记录
输出:
department ip
A 10.192.168.2
A 10.192.168.23
10.192.168.56
部门A的ip范围从10.0.0.0到10.255.255.255。
答案 0 :(得分:0)
首先,请看以下内容:https://www.regular-expressions.info/ip.html
正则表达式不是用于此任务的工具,因为要进行严格检查,您需要不可读的复杂正则表达式。另请阅读:Validating IPv4 addresses with regexp。严格的正则表达式看起来太复杂了。如果可能的话,应用简单的正则表达式:
where IP rlike '^10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$'
或者,如果您需要严格检查,则用.
分割IP地址并检查范围的每个八位位组,像这样,看起来比严格的正则表达式(未经测试)更简单:
select department, ip
from
(
select department, ip, split(ip, '\\.') i
from your_table t
)s where i[0]=10
and (i[1] between 0 and 255 )
and (i[2] between 0 and 255 )
and (i[3] between 0 and 255 );
在python中,您可以应用更优雅的解决方案并检查网络掩码/前缀,例如:checking-if-ipv4-address-in-network-python