regex - 如何在配置单元表上应用正则表达式进行 IP 地址过滤?
问题描述
我有蜂巢表:
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。
解决方案
首先,看这个:https ://www.regular-expressions.info/ip.html
正则表达式不是此任务的工具,因为要进行严格检查,您需要不可读的复杂正则表达式。另请阅读:使用 regexp 验证 IPv4 地址。严格的正则表达式看起来太复杂了。如果可能,像这样应用简单的正则表达式:
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
推荐阅读
- python - OpenCV 3.2 dnn 模块问题
- blazor-webassembly - 无法从 Program.cs 中的“appsettings.json”获取值
- mysql - 如何使用 if 条件在 laravel 中加入表,以便数据在同一个数组中
- r - 使用ggplot的非线性模型绘图问题
- c++ - range::lower_bound 对比较的要求是否与 std::lower_bound 不同?
- java - 如何为可以是字符串或自定义类型的元素列表创建 JAXB 元素
- python - 请如何缩短我的硒 python 代码
- scala - 使用数值时的类型转换
- android - Kotlin 1.5.20 构建问题
- python - 在间隔很小并一次请求大量数据的情况下提高循环的速度