我需要一个正则表达式,它将匹配以下模式a.b.c.d /nn
,例如192.168.0.24 /32
。
同时,我想做一些验证,这样在八位字节中,第一个数字可能只有1或2,如果最后3个八位字节只由1个数字组成,那么它也可能是0。此外,八位字节的数量应最多为255。以与/nn类似的方式,第一个数字应该只从1到3,但如果是3,第二个数字应该从0到2,如果第一个数字不存在,那么唯一的数字应该从1到9。
我可以写这样的图案
(?<!d)(?!0|4|5|6|7|8|9)d{1,3}.d{1,3}.d{1,3}.d{1,3} +/(?<!d)(?!0|4|5|6|7|8|9)d{1,2}
但是例如CCD_ 3也匹配它。
这对你有用吗?
def find_ips(ip_string):
for match in re.finditer(r'(?P<ip>[12]d*.d+.d+.d+)s+/(?P<mask>d+)', ip_string):
octets = list(map(int, match.group('ip').split('.')))
if all(0 <= octet <= 255 for octet in octets) and int(match.group('mask')) <= 32 and octets[-1] > 0:
yield match.group()
# ips = ['192.168.0.1 /32', '22.22.22.22 /32']
ips = list(find_ips("ip1=8.8.8.8 /32; ip2=192.168.0.1 /32; ip3=22.22.22.22 /32; ip4=192.168.740.056 /39"))