之前一直不太会写正则表达式,很多要用到正则表达式的都直接百度,像上次要用正则表达式验证是否是合法的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)$"
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)))