正则表达式
正则表达式概述、初体验
- 正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性
案例:
- 需求:假如现在要求校验一个qq号码是否正确,6位及20位之内,必须全部是数字
传统做法:
public static boolean Checkqq(String qq){
//1.不满足条件的先过滤掉
if (qq == null || qq.length() < 6 || qq.length() > 20){
return false;
}
//2.判断是否全部是数字 并且长度是 6-20位
for (int i = 0; i < qq.length(); i++) {
char ch = qq.charAt(i);
if (ch <'0' || ch > '9'){
return false;
}
}
return true;
}
利用正则表达式:
public static boolean Checkqq2(String qq){
return (qq != null) && qq.matches("\\d{6,20}");
}
由此可以看出,正则表达式是要比传统方式简洁很多。
正则表达式的匹配规则
字符类 (默认匹配一个字符)
[abc] ------ 只能是a b c
[ ^abc] ----- 除了a,b,c之外的任何字符[a-zA-Z] ------ a到z A到Z ,包括(范围)
[a-d[m-p]] ------ a到d,或m到p
[a-z&&[def]] ------- d,e,或f(交集)
[a-z&&[ ^bc]] ------- a到z,除了b和c
[a-z&&[ ^ m-p]] ------- a到z,除了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? ------- X,一次或根本不
X* ------- X,零次或多次
X+ ------- X,一次或多次
x[n] ------- X,正好n次
X[n,] ------- X,至少n次
X[n,m] ------- X,至少n但不超过m次
字符串对象提供了匹配正则表达式规则的API
public boolean matches(String regex) : 判断是否匹配正则表达式,匹配返回true,不匹配返回false
单个字符的匹配
//用 a 去匹配 abc 三个中的一个 [abc]意思是a或者b或者c
System.out.println("a".matches("[abc]")); //true
//用 z 去匹配 abc 三个中的一个
System.out.println("z".matches("[abc]")); //false
//用 ab 去匹配 abc
System.out.println("ab".matches