正则匹配的基本知识和概念:
[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 不识别小数点