1、描述字符
x 字符 x 例如: a
\ 反斜线字符
\t 制表符 (’\u0009’)
2、描述多个字符
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[0-9] 0 到 9之间数字的匹配
3、预定义字符类
. 任何字符
. 只代表 . 文本
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符 空格
\S 非空白字符
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
4、边界匹配器
^ 行的开头 在括号外面表示以什么开头 , 在中括号里面表示否定
$ 行的结尾
\b 单词边界
5、数量词
X? X,一次或一次也没有 b?
X* X,零次或多次 b*
X+ X,一次或多次 b+ 至少一个
X{n} X,恰好 n 次 b{6} 必须由6个
X{n,} X,至少 n 次 b{6,} 至少6个
X{n,m} X,至少 n 次,但是不超过 m 次 b{6,16} 至少6个,最多16个
6、分组
() 表示独立组
\n 预处理 n 表示位置数值 ([0-9])([a-z])\1\2 匹配 1a1a
示例
// qq号,手机号,用户名
public static void test2() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入QQ号");
String userQQ = sc.next();
if (userQQ.matches("[1-9][0-9]{4,10}")) { // 5-11位数
System.out.println("可以注册");
}else {
System.out.println("输入的格式不正确,请输入5-11位开头不为0的数");
}
System.out.println("请输入手机号");
String phone = sc.next();
if(phone.matches("[1][3-5[7-9]]\\d{9}")) {
System.out.println("可以注册");
}else {
System.out.println("输入的格式不正确,请输入正确的手机号");
}
System.out.println("请输入用户名");
String username = sc.next();
if(username.matches("[a-zA-z]\\w{2,11}")) { // 3 - 12 位
System.out.println("可以注册");
}else {
System.out.println("输入的格式不正确,请输入3-12位且以字母开头");
}
}