1:如何用正则表达式搜索ip地址
正则匹配的基本知识和概念:
[abc] :代表a或b或c中字符的任意一个
[^abc] :代表除abc外的任何字符
[a-z] :a到z中小写字符的任意一个
[A-Z] : 大写字符的任意一个
[a-zA-Z0-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-Z0-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次。
###
\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
-------->
(\d{1,3}.){3}\d{1,3}
会匹配到255以上,存在不合法ip
-------->
((1\d{2}.)|(2[0-5]{2}.)|(\d{1,2}.)){3}((\d{1,2})|(1\d{2})|(2[0-5]{2}))
识别过程中由于|,识别的顺序不同导致ip地址会识别到非法ip地址
-------->
单独先识别第一段ip地址,把第一个子表达式单另拉出来加上^表示第一段ip地址开头为(\d{1,2}),
(^((2[0-5]{2}.)|(1\d{2}.)|(\d{1,2}.))((2[0-5]{2}.)|(1\d{2}.)|(\d{1,2}.){2})((1\d{2})|(2[0-5]{2})|(1\d{2})))
无法匹配到2开头的,第三位存在大于5的数字的合法ip地址
-------->
((2[0-4]\d.)|(25[0-5].)|(1\d{2}.)|(\d{1,2}.))
200-249 250-259 100-199 00-99
((2[0-5]{2}.)|(1\d{2}.)|(\d{1,2}.){2})
200-255 | 100-199 | 00-99 识别两次
((1\d{2})|(2[0-5]{2})|(\d{1,2})))
100-199 | 200-255 | 00-99 不识别小数点
((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})))
2:如何用正则表达式匹配身份证号:
^[1-9]\d{5}(19|([2]\d))\d{2}((0[1-9])|((10|11|12))[0-2] [1-9]|10|20|30|31)\d{3}(\d|x|X)
^[1-9]\d + \d{5}
1-9开头 + 0-9随机匹配5次
(19|([2]\d)) + \d{2}
19 |2+(0-9)+ (0-9)随机匹配2次
((0[1-9])|((10|11|12)) +[0-2] [1-9]|10|20|30|31)
0(1-9)月|10|11|12月+(0-2)(1-9)|10|20|30|31日
\d{3} + (\d|x|X)
0-9匹配3次 + 0-9|x|X匹配一次
3.如何用正则匹配手机号
在中国通常第二位是345789