gpt4 book ai didi

python - IP 地址或 CIDR block 匹配正则表达式

转载 作者:太空宇宙 更新时间:2023-11-04 07:10:48 24 4
gpt4 key购买 nike

我需要检查任何 IPv4 地址或以下 CIDR block 之一的字符串:/16 或/24。因此,192.168.0.1 应该匹配。 192.168.0.0/16 应该匹配。 192.168.0.0/17 不应匹配我正在使用以下正则表达式:

re.compile(r'^([0-9]{1,3}\.){3}[0-9]{1,3}(/(16|24))?')

这匹配所有 IP 地址,但也匹配 192.168.0.0/aaaa 之类的字符串

现在,如果我更改正则表达式(删除末尾的 ?):

re.compile(r'^([0-9]{1,3}\.){3}[0-9]{1,3}(/(16|24))')

它匹配 CIDR block /16 或/24 但不再匹配 IP 地址(例如 192.168.0.1)。

不是'?'应该检查一组可选事件?我做错了什么?

注意:我知道 IP 地址正则表达式本身并不完美,但我更有兴趣在所描述的问题上获得帮助。

最佳答案

这应该有效:

^([0-9]{1,3}\.){3}[0-9]{1,3}($|/(16|24))$

它检查 $(行结束)或 /1624.

就像你说的那样 ? 将一个组标记为可选,这意味着它会尽可能将其包含在匹配项中。但在某些情况下,它不能像 192.168.0.0/aaaa 那样,但因为它是可选的,所以它仍会匹配 其他 部分。

这就是为什么上面的正则表达式更适合您的需要。这样,只有当它以 /24/16end of line 结束时,您才会获得匹配,例如。 192.168.0.1

关于python - IP 地址或 CIDR block 匹配正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12141206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com