我有子程序,需要根据地址是IPV4还是IPV6进行2种不同的操作。如果我只是模式匹配':'来确定地址是否是IPV6?
有没有例外?
例如:1.1.1.1没有冒号 1 :: 1有:
以上的子网工作也是如此: 例如:1.2.3.4/24 2002 :: 1.2.3.4/120
我不想对IPV4或IPV6使用巨大的正则表达式模式匹配。 感谢。
答案 0 :(得分:0)
如果你想要一个完整的IPV6匹配,那么就有一个完整的正则表达式 here:
答案 1 :(得分:0)
简而言之,如果输入中冒号的数量> = 2,则将其视为IPv6。
我有一个相同的问题,即输入可以是IPv4或IPv6或主机名,并且在每种情况下都可以是端口。根据输入,需要使用适当的正则表达式对其进行验证。
我考虑的方法是计算输入中的冒号。如果colonCount >= 2
=> IPv6,否则为IPv4或主机名。如果IPv6存在于[
和]:
之间,则稍后会根据端口的存在来提取IPv6。对于v4 /主机,只需用:
分割即可。剩下的字符串是可以使用适当的正则表达式评估的纯IP地址(v4 / v6)或主机名。