正则表达式的概念
- 正则表达式就是用来验证各种字符串的规则:它内部描述了一些规则,我们可以验证用户输入的字符串是否匹配这个规则
- 常见例子:验证手机号格式,验证身份证号格式,验证邮箱格式。
- 正则表达式的分类:字符类,逻辑运算符,预定义字符,数量词
下面我将通过正则表达式的各个分类来介绍正则表达式
字符类
- [abc]:代表a或者b,或者c字符中的一个
System.out.println("a".matches("[abc]")); // true
- [^abc]:代表除a,b,c以外的任何字符
System.out.println("a".matches("[^abc]")); // false
- [a-z]:代表a-z的所有小写字符中的一个
System.out.println("z".matches("[a-zA-z]")); // true
- [A-Z]:代表A-Z的所有大写字符中的一个
System.out.println("zz".matches("[a-zA-Z][a-zA-Z]")); //true
- [0-9]:代表0-9之间的某一个数字字符
System.out.println("0".matches("[a-zA-Z]"));//false
- [a-zA-Z0-9]:代表a-z或者A-Z或者0-9之间的任意一个字符
System.out.println("0".matches("[a-zA-Z0-9]"));//true
- [a-fo-z]:代表a-f或者o-z之间的任意一个字符
System.out.println("az".matches("[a-zA-Z]"));//false,两个字符无法和一个字符相匹配
逻辑运算符
- &&:并且
- | :或者
- \ :转义字符
预定义字符
- ".": 匹配任何字符
- "\d": 任何数字[0-9]的简写
- "\D":非任意数字[^0-9]的简写
- "\s": 空白字符:[ \t\n\x0B\f\r] 的简写
- "\S": 非空白字符:[^\s] 的简写
- "\w":单词字符:[a-zA-Z_0-9]的简写
- "\W":非单词字符的[^\w]的简写
数量词
- X? : 0次或1次
- X* : 0次或多次
- X+ : 1次或多次
- X{n} : 恰好n次
- X{n,} : 至少n次
- X{n,m} : n到m次(包含n和m)
public class Demo {
public static void main(String[] args) {
// 必须是数字 字母 下划线 至少 6位
System.out.println("2442fsfsf".matches("\\w{6,}"));//true
System.out.println("244f".matches("\\w{6,}"));//false
// 必须是数字和字符 必须是4位
System.out.println("23dF".matches("[a-zA-Z0-9]{4}"));//true
System.out.println("23 F".matches("[a-zA-Z0-9]{4}"));//false
System.out.println("23dF".matches("[\\w&&[^_]]{4}"));//true
System.out.println("23_F".matches("[\\w&&[^_]]{4}"));//false
}
}
了解完了正则表达式的规则之后可以做一些练习巩固一下,下面我将提供一些关于正则表达式的练习
练习
验证手机号码
- 手机号码规则
- 手机号码只能以1开头
- 手机号码第二位只能是3-9之间的
- 后面9位可以任意数字
String regex1 = "1[3-9]\\d{9}";System.out.println("13112345678".matches(regex1));//true
验证座机号码
- 座机号码规则
- 一定是以0开头的
- 区号从第二位开始可以是任意的数字,可以出现2到3次。
- 区号和号码中间可以有 - 也可以没有
- 号码的第一位也不能以0开头,从第二位开始可以是任意的数字,号码的总长度:5-10位
String regex2 = "0\\d{2,3}-?[1-9]\\d{4,9}";System.out.println("020-2324242".matches(regex2)); //true