我需要检查任何 IPv4 地址或以下 CIDR 块之一的字符串:/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 块 /16 或 /24,但不再匹配 IP 地址(例如,192.168.0.1)。
不是吗?应该检查一个组的可选事件吗?我究竟做错了什么?
注意:我知道 IP 地址正则表达式本身并不完美,但我更感兴趣的是在所描述的问题上获得帮助。