概述
正则表达式
- 就是由一些特定的字符组成,代表的是一个规则。
作用一:用来校验数据格式是否合法 (更简单、更便捷)
作用二:在一段文本中查找满足要求的内容
String提供的一个陪陪正则表达式的方法
public boolean matches(String regex) 判断字符串是否匹配正则表达式,匹配返回true,不匹配返回false。
初步使用
完成需求:
- 校验QQ号码是否正确,要求全部是数字,长度是(6-20)之间,不能以0开头。
普通方法
public class InitialUseOne { public static void main(String[] args) { System.out.println(checkQQ("2668834948")); } public static boolean checkQQ(String qq){ //1.判断QQ号码是否为null,是否以0开头,同时可以控制号码长度在6-20之间 if(qq == null || qq.startsWith("0")|| qq.length() < 6 || qq.length() > 20){ return false; } //2.判断是否全都是数字 for (int i = 0; i < qq.length(); i++) { //根据索引提取当前位置处的字符 char ch = qq.charAt(i); //判断ch存储的字符,如果不是数字,则QQ号码不合法。 if(ch < '0' || ch > '9'){ return false; } } //3.每个字符都判断完,则说明QQ号码合法 return true; } }
运行结果:
正则表达式
package user.RegularExpression; public class InitialUseTwo { public static void main(String[] args) { System.out.println(checkQQ("2668834948")); } public static boolean checkQQ(String qq){ return qq != null && qq.matches("[1-9]\\d{5,19}"); // [1-9]代表第一位只能是1-9的数字,\\d代表全部为数字,{5,19}表示后面的位数为5到10位 } }
运行结果:
书写规则
正则表达式中,一些基本符号的含义:
- ^ :取反
- && :交集,不能写单个的&
- \ :转义字符
- | :写在括号外面表示并集
- [] :里面的内容出现一次
字符类
预定义字符
(只匹配单个字符)
数量词
其他
格式 | 含义 |
(?i) | 忽略后面字符的大小写 |
a((?i)b)c | 只忽略b的大小写 |
() | 分组 |
特殊案例
忽略大小写:
public class Test { public static void main(String[] args) { System.out.println("abc".matches("(?i)abc")); //匹配结果为true System.out.println("ABC".matches("(?i)abc")); //匹配结果为true System.out.println("aBc".matches("a((?i)b)c")); //匹配结果为true System.out.println("ABc".matches("a((?i)b)c")); //匹配结果为false } }
运行结果:
"或"的运用
需求:么是3个小写字母,要么是3个数字
public class Test { public static void main(String[] args) { System.out.println("123".matches("\\d{3}|[a-z]{3}")); //匹配结果为true System.out.println("abc".matches("\\d{3}|[a-z]{3}")); //匹配结果为true System.out.println("aAc".matches("\\d{3}|[a-z]{3}")); //匹配结果为false System.out.println("123abc".matches("\\d{3}|[a-z]{3}")); //匹配结果为false } }
运行结果:
分组
需求二:必须是“我爱”开头,中间可以是至少一个“编程”,最后至少是1个“666”
public class Test { public static void main(String[] args) { System.out.println("我爱编程编程666666".matches("我爱(编程)+(666)+")); //匹配结果为true System.out.println("我爱编程编程6666666666".matches("我爱(编程)+(666)+")); //匹配结果为false } }
END