本文最后更新于:July 14, 2020 pm
本文主要介绍使用正则表达式匹配ipv4地址。
1、粗犷匹配
比较粗犷的匹配方法,直接匹配四组使用了.
进行分隔的数字
但是这样容易把不是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]\.) (?:2[0-4][0-9]\.) (?:25[0-5]\.) (?:[1-9][0-9]\.) (?:[0-9]\.)
|
注意这五个分组都是或|
关系,前面三个部分都是0-255加上一个点.
,最后的是没有点的.
,所以前面的执行三次匹配,最后再加上没有点.
的一次,正好就能匹配所有的IP地址
| (?:(?:1\.)|(?:2\.)|(?:25\.)|(?:\.)|(?:\.)){3}(?:(?:1)|(?:2)|(?:25)|(?:)|(?:))
|
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}
|