目录
概述
初步使用
普通方法
正则表达式
书写规则
字符类
预定义字符
数量词
其他
特殊案例
概述
正则表达式
- 就是由一些特定的字符组成,代表的是一个规则。
作用一:用来校验数据格式是否合法 (更简单、更便捷)
作用二:在一段文本中查找满足要求的内容
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位
}
}
运行结果:
书写规则
正则表达式中,一些基本符号的含义:
- ^ :取反
- && :交集,不能写单个的&
- \ :转义字符
- | :写在括号外面表示并集
- [] :里面的内容出现一次
字符类
格式 | 含义 |
[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(等同于[ad-z]) |
[a-z&&[^m-p]] | a到z,除了m到p(等同于[a-lq-z]) |
预定义字符
(只匹配单个字符)
格式 | 含义 |
. | 任何字符(注意:\n回车符号不匹配) |
\d | 一个数字:[0-9] |
\D | 非数字:[0-9] |
\s | 一个空白字符 |
\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次 |
其他
格式 | 含义 |
(?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
学习自:黑马程序员——JavaSE课程