我需要检查一个字符串是否符合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地址正则表达式本身并不完美,但我更希望在描述的问题上得到帮助。