正则表达式:1.可以校验字符串是否满足一定的规则,并用来校验数据格式的合法性
2.在一段文本中查找满足要求的内容
规则:
一、字符类(注:[]不是数组,而是限定范围,只匹配一个字符)
1.[abc] --- 只能是a,b,c单个字符
2.[^abc] --- 除了a,b,c之外的任何字符
3.[a-zA-Z] --- a-z A-Z(包括)
4.[a-d[m-p]] --- a-d或m-p
5.[a-z&&[def]] --- a-z和def的交集
6.[a-z&&[^bc]] --- a-z和非bc的交集
7.[a-z&&[^m-p]] --- a-z和除了m-p的交集
(注:如果要表示交集,那么需要用&&,如果是&,那么其本身就是且符号,没有实际含义)
二、预定义字符(只匹配一个字符)
1. . --- 任何字符(回车符号不匹配)
2. \d --- 一个数字:[0-9]
3. \D --- 非数字:[^0-9]
4. \s --- 一个空白字符:[\t \n \x08 \f \r]
5. \S --- 非空白字符:[^\s]
6. \w --- [a-zA-Z_0-9]英文、数字、下划线
7. \W --- [^\w]一个非单词字符
(注:java中\表示转义字符的开始,所以要使之成立,那么就需要再加个\,简单记忆两个\表示一个\)
三、数量词
1.X? --- X,一次或零次
2.X* --- X,零次或多次
3.X+ --- X,一次或多次
4.X{n} --- X,正好n次
5.X{n,} --- X,至少n次
6.X{n,m} --- X,至少n但不超过m次
如果记不住那么也不用担心,打开API文档,搜索pattern,里面有正则表达式的构造规则,String类里面有个matches的方法,里面有个正则表达式的链接,点击就可以查看了
语法:System.out.println("输入的字符".matches("规则"));
编写心得:
1.按照正确的数据进行拆分
2.找每一部分的规律,并编写正则表达式
3.吧每一部分的正则拼接在一起,就是最终的结果
(拼写的时候:从左到右)
以下是两个练习:
public static void main(String[] args) {
/*
需求:
请编写正则表达式验证用户输入的手机号码是否满足需求
请编写正则表达式验证用户输入的邮箱号码是否满足需求
请编写正则表达式验证用户输入的座机电话号码是否满足需求
验证手机号码 15575468875 1665484577 13354887645 16446885478
验证邮箱号码 215447784@qq.com 54584645@163.com 5477844@itfang.com
验证座机号码 020-4658554 031-4578954 011-4754997
*/
//从左至右原则
//1.手机号
//验证手机号码 15575468875 1665484577 13354887645 16446885478
String regex1 = "[\\d[^0]][3-9]\\d{9}";
System.out.println("15575468875".matches(regex1));//true
System.out.println("1665484577".matches(regex1));//只有十位,false
System.out.println("13354887645".matches(regex1));//true
System.out.println("16446885478".matches(regex1));//true
System.out.println("-----------------");
//2.座机号
//验证座机号码 020-4658554 031-4578954 011-4754997
String regex2 = "[0][\\d[^0]]{2}-\\d{5,10}";
System.out.println("020-4658554".matches(regex2));//true
System.out.println("031-4578954".matches(regex2));//true
System.out.println("011-4754997".matches(regex2));//true
System.out.println("------------------------");
//3.邮箱号
//验证邮箱号码 215447784@qq.com 54584645@163.com fang@itfang.com
String regex3 = "[\\w[^_]]+[@][[\\w^_]]+[[.][\\w^_]]+";
System.out.println("215447784@qq.com".matches(regex3));
System.out.println("54584645@163.com".matches(regex3));
System.out.println("fang@itfang.com".matches(regex3));
}
public static void main(String[] args) {
/*
需求:假如现在要求校验一个qq号码是否正确
规则:6位及20位之内,0不能在开头,必须全部是数字
使用正则表达式检验
示范qq号(随便弄的):5461215,6x545548,645588225,15355778925,0154656
*/
String regex = "[1-9][\\d]{5,19}";
System.out.println("5461215".matches(regex));
System.out.println("6x545548".matches(regex));
System.out.println("645588225".matches(regex));
System.out.println("15355778925".matches(regex));
System.out.println("0154656".matches(regex));
}
扩展:忽略大小写
public static void main(String[] args) {
//忽略大小写
String regex = "(?i)abc";
System.out.println("abc".matches(regex));
System.out.println("aBc".matches(regex));
System.out.println("ABC".matches(regex));
System.out.println("----------");
String regex1 = "a(?i)bc";
System.out.println("abc".matches(regex1));
System.out.println("aBc".matches(regex1));
System.out.println("ABC".matches(regex1));
}