使用正则表达式检查IP地址合法性的方法 IP地址的正则表达式写法

时间:2024-03-17 14:22:16

  之前一直不太会写正则表达式,很多要用到正则表达式的都直接百度,像上次要用正则表达式验证是否是合法的ip地址,然后就上网找,结果就是没找到一个对的,今天就为大家贡献一下,写个对的,并做一下解析。(建议大家还是去看书去规范的学一下,不要直接百度,不然都是坑)。

iPv4的ip地址都是(1~255).(0~255).(0~255).(0~255)的格式

下面给出相对应的正则表达式:

"^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."

+"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."

+"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." 

+"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$"
View Code

 

        public static boolean isIpAddress(String address){
         String regex = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."
                 + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
                 + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
                 + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
         
         Pattern p = Pattern.compile(regex);
         Matcher m = p.matcher(address);

         return m.matches();
     }

 

 

 

上面的一个不漏就是正确的验证ip的正则表达式,简单的讲解一下

\\d表示0~9的任何一个数字

{2}表示正好出现两次

[0-4]表示0~4的任何一个数字

| 的意思是或者

( )上面的括号不能少,是为了提取匹配的字符串,表达式中有几个()就表示有几个相应的匹配字符串

1\\d{2}的意思就是100~199之间的任意一个数字

2[0-4]\\d的意思是200~249之间的任意一个数字

25[0-5]的意思是250~255之间的任意一个数字

[1-9]\\d的意思是10~99之间的任意一个数字

[1-9])的意思是1~9之间的任意一个数字

\\.的意思是.点要转义(特殊字符类似,@都要加\\转义)

说到这里应该已经很清楚的知道了上面的正则表达式的意思。

转自 https://blog.csdn.net/u012806692/article/details/50635590

-----------------------------------------------------------------------------------------------------------------------

这里讲的是IPv4的地址格式,总长度 32位=4段*8位,每段之间用.分割, 每段都是0-255之间的十进制数值。

将0-255用正则表达式表示,可以分成一下几块来分别考虑:

取值区间 特点 正则写法 可合并的写法 可合并的写法 可合并的写法
0-9 一位数,只有个位,取值是0~9 \d [1-9]?\d (1\d{2})|([1-9]?\d)

(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))

 

10-99

两位数,十位取值1-9,个位取值是0~9 [1-9]\d
100-199 三位数,最高位取值为1,十位取值0-9,个位取值0-9 1\d{2}  -
200-249 三位数,最高位取值为2,十位取值0-4,个位取值0-9 2[0-4]\d  -  -
250-255 三位数,最高位取值为2,十位取值5,个位取值0-5 25[0-5]  -  -

IP地址格式可表示为:XXX.XXX.XXX.XXX,XXX取值范围是0-255,前三段加一个.重复了三次,在与最后一段合并及组成IP地址的完整格式。

所以IP地址的正则表示法如下:

((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))