一.正则表达式的语法
字符:
字符 | 含义 |
---|---|
x | 字符x |
\\ | 反斜线字符 |
\t | 制表符 |
\n | 换行符 |
\r | 回车符 |
字符类:
字符类 | 含义 |
---|---|
[abc] | a、b 或 c(简单类) |
[^abc] | 任何字符,除了 a、b 或 c(否定) |
[a-zA-Z] | a 到 z 或 A 到 Z,两头的字母包括在内(范围) |
[a-zA-Z_0-9] | 里面包含大写字母或者小写字母或者数字字符 |
预定义字符:
预定义字符 | 含义 |
---|---|
. | 任何字符 |
\d | 数字0-9 |
\w | 单词字符:[a-zA-Z_0-9] |
注意:写作\\d和\\w
边界匹配器:
边界匹配器 | 含义 |
---|---|
^ | 行的开头 |
$ | 行的结束 |
\b | 单词边界 |
Greedy 数量词:
Greedy 数量词 | 含义 |
---|---|
X? | x出现1次或者0次 |
X* | x出现0次或多次 |
X+ | x出现1次或多次 |
X{n} | x恰好出现n |
X{n,} | x至少出现n次 |
X{n,m} | X至少出现n次,但是不超过m次 |
二.String类和正则表达式
public String[] split(String regex)
:根据给定正则表达式的匹配拆分此字符串public String replaceAll(String regex,String replacement)
:使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串
public class Demo1 {
public static void main(String[] args) {
//定义一个字符串
String s = "aa-bb-cc";
//-将字符串分割
String[] arr = s.split("-");
for(int x = 0 ; x < arr.length ; x ++){
System.out.print(arr[x]+" ");
}
System.out.println();
String a = "hello123worldjava123456";
//数字出现一次或多次
String m = "\\d+";
String n = "*";
//用*替换数字
String h = a.replaceAll(m, n);
System.out.println(h);
}
}
结果:
aa bb cc
hello*worldjava*
三.正则表达式的综合练习
1.校验QQ
import java.util.Scanner;
/*校验qq:
* 规则:5-15位的一个数字
* 不能以0开头
*/
public class Demo2 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入qq号:");
String qq = sc.nextLine();
method(qq);
}
//校验qq的方法
public static void method(String qq){
//不能以0开头,5-15位的数字
String s = "[1-9][0-9]{4,14}";
if(qq.matches(s)){
System.out.println("qq号码正确");
}else{
System.out.println("qq号码错误");
}
}
}
结果:
请输入qq号:
11113333
qq号码正确
2.校验邮箱
import java.util.Scanner;
/*邮箱的几种形式:122444555@qq.com
zhangsan@163.com
zhangsan@westos.com.cn
zhangsan@sina.com.cn
*/
public class Demo3 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入邮箱:");
String yx = sc.nextLine();
method(yx);
}
//校验邮箱的方式
public static void method(String yx){
String a = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-z]{3})(\\.[a-z]*)";
if(yx.matches(a)){
System.out.println("正确");
}else{
System.out.println("错误");
}
}
}
结果:
请输入邮箱:
zhangsan@qq.com.cn
正确
三.模式对象和匹配器对象的应用顺序
Pattern:模式对象
public static Pattern compile(String regex)
:将给定的正则表达式编译成要给模式对象public Matcher matcher(CharSequence input)
:创建匹配给定输入与此模式的匹配器
Matcher:匹配器对象
public boolean matches()
:尝试将整个区域与模式匹配
模式和匹配器对象的典型顺序:
- 将正则规则编译成要给的模式对象(返回一个模式对象)
- 使用模式对象去调用一个matcher()返回一个匹配器对象
- 然后再调用匹配器对象的一些功能
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Demo4 {
public static void main(String[] args) {
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaab");
boolean flag = m.matches();
System.out.println(flag);
}
}
结果:
true