文章目录
- 正则表达式
- 前言
- 正则表达式规范
- 常用正则规范
- 数量表示(X表示一组规范)
- 逻辑运算符(X、Y表示一组规范)
- 支持正则的Pattern类和Matcher类
- 案例演示
- 运行结果
- String类对正则表达式的支持
- String类的正则支持
- 案例演示
- 运行结果
- 总结
正则表达式
前言
正则表达式在编程界是一种非常重要的应用,使用正则表达式可以方便地对数据进行匹配,还可以执行更加复杂地字符串验证、拆分、替换的功能。
正则表达式规范
常用正则规范
序号 | 规范 | 描述 | 序号 | 规范 | 描述 |
1 | \\ | 表示反斜线(\)字符 | 9 | \w | 表示字母、数字、下划线 |
2 | \t | 表示制表符 | 10 | \W | 表示非字母、数字、下划线 |
3 | \n | 表示换行 | 11 | \s | 表示所有空白字符(换行、空格等) |
4 | [abc] | 字符a、b或c | 12 | \S | 表示所有非空白字符 |
5 | [^abc] | 表示除了a、b、c之外的任意字符 | 13 | ^ | 行的开头 |
6 | [a-zA-Z0-9] | 表示由字母、数字组成 | 14 | $ | 行的结束 |
7 | \d | 表示数字 | 15 | . | 匹配除了换行符之外的任意字符 |
8 | \D | 表示非数字 |
数量表示(X表示一组规范)
序号 | 规范 | 描述 | 序号 | 规范 | 描述 |
1 | X | 必须出现一次 | 5 | X{n} | 必须出现n次 |
2 | X? | 可以出现0次或1次 | 6 | X{n,} | 必须出现n次以上 |
3 | X* | 可以出现0次、1次或多次 | 7 | X{n,m} | 必须出现n~m次 |
4 | X+ | 可以出现1次或多次 |
逻辑运算符(X、Y表示一组规范)
序号 | 规范 | 描述 | 序号 | 规范 | 描述 |
1 | XY | X规范后跟着Y规范 | 3 | (X) | 作为一个捕获组规范 |
2 | X|Y | X规范或Y规范 |
支持正则的Pattern类和Matcher类
在java.util.regex包中的Pattern、Matcher两个类支持在程序中应用Pattern类和Matcher类。
- Pattern类负责定义正则表达式规范,即:Pattern p = Pattern.compile(String regex)设置正则表达式规则,Mathcer m = Pattern.matcher(String str)获取Matcher类实例化对象。
- Matcher类实例化对象可以通过matches()方法判断此字符串是否满足正则表达式规则。
案例演示
package chapter_eleven;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexDemo01 {
public static void main(String[] args) {
String str = "1234567890"; //构建字符串
Pattern pattern = Pattern.compile("[0-9]+"); //实例化Pattern类对象,正则规则为匹配1个或多个数字
Matcher matcher = pattern.matcher(str); //验证字符串内容是否合法
if(matcher.matches()){ //正则检验,成功返回true,否则返回false
System.out.println("合法的字符串!");
}else {
System.out.println("不合法的字符串!");
}
}
}
运行结果
合法的字符串!
String类对正则表达式的支持
在String类中有3个方法支持正则操作
String类的正则支持
序号 | 方法 | 类型 | 描述 |
1 | public boolean matches(String regex) | 普通 | 字符串匹配 |
2 | public String replaceAll(String regex, String replacement) | 普通 | 字符串替换 |
3 | public String[] split(String regex) | 普通 | 字符串拆分 |
案例演示
package chapter_eleven;
public class RegexDemo02 {
public static void main(String[] args) {
String str = "A059B321C456D321E543";
boolean flag = str.matches("([A-Z][0-9]{3})+"); //进行字符串匹配
String[] strs = str.split("[0-9]+"); //进行字符串拆分
String strReplace = str.replaceAll("\\d+","\t"); //进行字符串的替换
System.out.println("正则匹配的结果---->" + flag); //输出结果
System.out.println("正则替换的结果---->" + strReplace);
System.out.print("正则拆分的结果---->");
for (int i = 0; i < strs.length; i++){
System.out.print(strs[i] + "、");
}
}
}
运行结果
正则匹配的结果---->true
正则替换的结果---->A B C D E
正则拆分的结果---->A、B、C、D、E、
总结
使用正则表达式可以方便地对字符串进行验证、拆分、替换等复杂地功能,在开发中经常会用到String类提供地正则支持,而很少采用Pattern和Matcher类,运用一些正则表达式时,要注意对一些敏感的字符进行转义操作。