一、正则表达式的作用
① 校验字符串是否满足规则
② 在文本中查找满足要求的内容
二、基本规则
字符类
[abc] 只能是a, b,或c
[^abc] 除了a, b, c之外的任何字符
[a-zA-Z] a到zA到z,包括(范围)
[a-d[m-p]] a到d,或m到p
[a-z&&[def]] a-z和def的交集。为:d, e, f
[a-z&&[^bc]] a-z和非bc的交集。(等同于[ad-z])
[a-z&&[^m-p]] a到z和除了m到p的交集。(等同于[a-lq-z])
预定义字符
. 任何字符
\d 一个数字:[0-9]
\D 非数字:[^O-9]
\s 一个空白字符:[\t\n\xOB\f\r]
\S 非空白字符:[^\s]
\w [a-zA-Z_0-9]英文、数字、下划线
\W [^\w]一个非单词字符
数量词
X? X,一次或0次
X* X,零次或多次
X+ X,一次或多次
X{n} X,正好n次
X{n,} X,至少n次
X{n,m} X,至少n但不超过m次
三、正则表达式实际运用
①
//必须是数字字母下划线至少6位
system.out.println("2442fsfsf" .matches( regex: "\\w{6,}")); //true
system.out.println("244f".matches( regex:"\\w{6,}"));//false
//必须是数字和字符必须是4位
system.out.print1n("23dF".matches( regex: "[a-zA-ZO-9]{4}"));//true
system.out.println("23_F".matches( regex: "[a-zA-Z0-9]{4}"));//false
system.out.println("23dF".matches( regex: "[\\w&&[^_]]{4}")); //true
system.out.print1n("23_F".matches( regex: "[\\w&&[^_]]{4]"));//falsel
②
//邮箱号码
//3232323@qq.com zhangsan@itcast.cnn dleieee9@163.com dleieee9@pci.com.cn
//思路;
//在书写邮箱号码正则的时候需要把正确的数据分为三部分
//第一部分:@的左边 \\w+
// 任意的字母数字下划线,至少出现一次就可以了
//第二部分:@只能出现一次
//第三部分:
.的左边[\\w&&[^_]]{2,6}
// 任意的字母加数字,总共出现2-6次(此时不能出现下划线)
// . \\.
//大写字母,小写字母都可以,只能出现2-3次[a-zA-Z]{2,3]
//我们可以把3.2和3.3看成一组,这一组可以出现1次或者两次
string regex3 = “\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2]";
system.out.println( "3232323@qq.com".matches(regex3));
system.out.println( "zhangsan@itcast.cnn".matches(regex3));
system.out.println( "dlei0009@163.com".matches(regex3));
system.out.println("dlei0eo9@pci.com.cn".matches(regex3));
③
// 13112345678/1分成三部分:
//第一部分:1表示手机号码只能以1开头
//第二部分:[3-9]表示子机号码第二位只能是3-9之间的
//第三部分: \\d{9}表示任意数字可以出现9次,也只能出现9次
String regex1 = "1[3-9]\\d{9}";
system.out.println( "13112345678".matches(regex1) ) ; //true
system.out.println( ""13712345667".matches(regex1) ) ;//true
system.out.println( "13945679027".matches(regex1)); //true
system.out.println("139456790271".matches(regex1) );//false
--------------------------------------------------------------------------------
//座机电话号码
//e28-232424222122442 027-42424 e712-32424341
//思路:
//在书写座机号正则的时候需要把正确的数据分为三部分
// 一:区号0\\d{2,3}
// 0:表示区号一定是以0开头的
// \\d{2,3}:表示区号从第二位开始可以是任意的数字,可以出现2到3次。
// 二: ?表示次数,0次或一次
// 三:号码︰号码的第一位也不能以0开头,从第二位开始可以是任意的数字,号码的总长度:5-10位
String regex2 = "0\\d{2,3}-?[1-9]\\d{4,9}";
system.out.print1n("020-2324242". matches(regex2) );
system.out.print1n( "02122442".matches(regex2) );
system.out.println ( "027-42424".matches( regex2) ) ;
system. out.println( "0712-3242434".matches(regex2));
④
//身份证号码的严格校验
//编写正则的小心得:
//第一步:按照正确的数据进行拆分
//第二步:找每一部分的规律,并编写正则表达式
//第三步:把每一部分的正则拼接在一起,就是最终的结果
//书写的时候:从左到右去书写。
//4108011993 02 28 457×
//前面6位:省份,市区,派出所等信息瞭第一位不能是0,后面5位是任意数字 [1-9]\\d{5}
//年的前半段:18 19 20 (18|19| 20)
//年的后半段:任意数字出现两次 \\d{2}
//月份: 01 ~ 09 10 11 12 (0[1-9]|1[0-2])
//日期:01 ~ 09 10~19 20~29 30 31 (0[1-9]|[12]\\d|3[01])
//后面四位: 任意数字出现3次,最后一位可以是数字也可以是大写X或者小写x \\d{3}[\\dXx]
--------------------------------------------------------------------------------
String regex6 = “[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|[1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]";
system.out.print1n( "41080119930228457x".matches(regex3));
system.out.print1n( "510801197609022309".matches( regex3));
system.out.println( "15040119810705387x".matches(regex3));