正则表达式之ip地址匹配(详细讲解) |
您所在的位置:网站首页 › 正则表达式最大值的数字是 › 正则表达式之ip地址匹配(详细讲解) |
正则表达式之ip地址匹配
一、正则匹配基本知识及概念二、ip地址匹配
一、正则匹配基本知识及概念
在练习之前,需要大家知道一些基本知识,如果有一定基础的可以跳过该步骤,直接往下看。 正则表达式-字符类 [abc]:代表a或者b,或者c字符中的一个。 [^abc]:代表除a,b,c以外的任何字符。 [a-z]:代表a-z的所有小写字符中的一个。 [A-Z]:代表A-Z的所有大写字符中的一个。 [0-9]:代表0-9之间的某一个数字字符。 [a-zA-Z0-9]:代表a-z或者A-Z或者0-9之间的任意一个字符。 [a-dm-p]:a 到 d 或 m 到 p之间的任意一个字符。正则表达式-逻辑运算符 &&:并且 | :或者(可以省略)正则表达式-预定义字符 “.” : 匹配任何字符。 “\d”:任何数字[0-9]的简写; “\D”:任何非数字[^0-9]的简写; “\s”: 空白字符:[ \t\n\x0B\f\r] 的简写 “\S”: 非空白字符:[^\s] 的简写 “\w”:单词字符:[a-zA-Z_0-9]的简写 “\W”:非单词字符:[^\w]正则表达式-数量词 x? : 0次或1次 x* : 0次到多次 x+ : 1次或多次 X{n} : 恰好n次 X{n,} : 至少n次 X{n,m}: n到m次(n和m都是包含的,最少n次,最多m次。 二、ip地址匹配题目要求:使用正则表达式匹配192.11.23.69 须知:ip地址的范围为0.0.0.0-255.255.255.255 接下来我们直接进入正题吧!在我们看到题目的第一眼,大家可能觉得很简单,这不就用\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
虽然完成了我们的题目要求,有些细心的伙伴会发现,用红色标注出来的部分,重复了三遍,是不是我们可以用分组的方式来简化表达式并完成题目要求。我们把上面的匹配表达式换成分组之后的样子,即(\d{1,3}\.){3}\d{1,3} 表达式讲解:(\d{1,3}\.) 匹配我们前三段的ip地址和’.‘,因为第四段ip地址最后面不能有’.',如果我们使用在同一个分组去匹配就会出现错误情况,而\d{1,3}刚好匹配我们最后一段ip地址 匹配效果如下:
第一种: 第二种: 为什么会出现上面的情况? 当我们觉得表达式很完美的时候,虽然256超出匹配范围,但是因为(\d{1,2}\.)的影响,使得我们的非法表达式也匹配成功,本来192.11.23.200为合法表达式,却只匹配到了98.11.23.200,请大家看我用红色箭头标注的地方,会不会跟我们子表达式的顺序有关呢?那好,我来改变一下顺序,我们将(\d{1,2}\.)放到了最后,防止出现错误匹配 改变匹配顺序后的表达式为: ( ( (2[0-5]{2}.)|(1\d{2}.)|(\d{1,2}.)){3}((1\d{2})|(2[0-5]{2})|(\d{1,2}))) 可是第二种情况使用改变顺序的表达式,依然会出现以上问题(这里也就印证了上文提到的那些话,要想写出一个符合规范的表达式就很困难)。
其实写到这里大家是不是感觉已经大功告成了?回答:No (2[0-5]{2})这个表达式能否匹配239这个ip呢?不知道有没有细心的小伙伴发现 所以最终正确的表达式应该为: (^((2[0-4]\d.)|(25[0-5].)|(1\d{2}.)|(\d{1,2}.))((2[0-5]{2}.)|(1\d{2}.)|(\d{1,2}.){2})((1\d{2})|(2[0-5]{2})|(\d{1,2}))) 在这里可以跟大家说一下,是否可以使用$来避免我们上述第一种问题,有兴趣的可以尝试一下,到这里,我们这道题目也算基本符合规范的完成了,还有什么问题可以私下交流! |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |