本文主要介绍使用正则表达式匹配ipv4地址。
1、粗犷匹配
比较粗犷的匹配方法,直接匹配四组使用了.
进行分隔的数字
\d+\.{3}\d+
但是这样容易把不是ip的也匹配进去,比如说8888.888.88.8这样的也是符合规则的,所以想要尽可能的准确,我们就要进行精细的匹配。
2、精准匹配所有ip
首先我们要确定ipv4地址的范围是0.0.0.0
到255.255.255.255
。然后就使用正则表达式逐个字进行匹配。
首先要匹配0-255
这256个数字,由于正则表达式在这里不能直接使用数值大小进行匹配,并且需要尽可能地精确控制数值范围,所以我们将其分为0-9
、10-99
、100-199
、200-249
、250-255
一共五个部分:
?: # 非获取匹配,只匹配但是不获取
(?:1[0-9][0-9]\.) # 100-199
(?:2[0-4][0-9]\.) # 200-249
(?:25[0-5]\.) # 250-255
(?:[1-9][0-9]\.) # 10-99
(?:[0-9]\.) # 0-9
注意这五个分组都是或|
关系,前面三个部分都是0-255加上一个点.
,最后的是没有点的.
,所以前面的执行三次匹配,最后再加上没有点.
的一次,正好就能匹配所有的IP地址
(?:(?:1[0-9][0-9]\.)|(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5])|(?:[1-9][0-9])|(?:[0-9]))
3、匹配局域网IP地址
局域网ip地址分为三个大的网段,分别是10.x.x.x
、172.16.0.0—172.31.255.254
和192.168.x.x
,具体匹配思路和上面一样
10.x.x.x
10(?:(?:\.1[0-9][0-9])|(?:\.2[0-4][0-9])|(?:\.25[0-5])|(?:\.[1-9][0-9])|(?:\.[0-9])){3}
172.16.0.0—172.31.255.254
172(?:\.(?:1[6-9])|(?:2[0-9])|(?:3[0-1]))(?:(?:\.1[0-9][0-9])|(?:\.2[0-4][0-9])|(?:\.25[0-5])|(?:\.[1-9][0-9])|(?:\.[0-9])){2}
192.168.x.x
192\.168(?:(?:\.1[0-9][0-9])|(?:\.2[0-4][0-9])|(?:\.25[0-5])|(?:\.[1-9][0-9])|(?:\.[0-9])){2}
匹配所有局域网IP地址
(?:(?:10(?:(?:\.1[0-9][0-9])|(?:\.2[0-4][0-9])|(?:\.25[0-5])|(?:\.[1-9][0-9])|(?:\.[0-9])))|(?:172(?:\.(?:1[6-9])|(?:2[0-9])|(?:3[0-1])))|(?:192\.168))(?:(?:\.1[0-9][0-9])|(?:\.2[0-4][0-9])|(?:\.25[0-5])|(?:\.[1-9][0-9])|(?:\.[0-9])){2}
网友评论