java如何使用正则表达式
正则表达式基础语法
Java中正则表达式通过java.util.regex包实现,主要涉及Pattern和Matcher类。基本元字符包括:
\d匹配数字,等价于[0-9]\w匹配单词字符(字母、数字、下划线).匹配任意单个字符(除换行符)*匹配前一个字符0次或多次+匹配前一个字符1次或多次?匹配前一个字符0次或1次{n}精确匹配n次^匹配字符串开头$匹配字符串结尾
创建Pattern对象
使用Pattern.compile()方法编译正则表达式:
Pattern pattern = Pattern.compile("\\d+"); // 匹配一个或多个数字
使用Matcher进行匹配
通过matcher()方法创建Matcher对象:
Matcher matcher = pattern.matcher("123abc");
boolean isMatch = matcher.matches(); // 全字符串匹配
boolean findMatch = matcher.find(); // 查找子串匹配
常用匹配方法
matches():整个字符串必须完全匹配模式find():在字符串中查找下一个匹配子串group():返回匹配到的子串start()/end():返回匹配位置的索引
示例代码:
String text = "订单号:12345,金额:¥888";
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(text);
while (m.find()) {
System.out.println("找到数字: " + m.group());
}
分组捕获
使用圆括号()创建捕获组:
Pattern p = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})");
Matcher m = p.matcher("2023-05-20");
if (m.matches()) {
System.out.println("年: " + m.group(1)); // 2023
System.out.println("月: " + m.group(2)); // 05
System.out.println("日: " + m.group(3)); // 20
}
字符串替换
使用replaceAll()和replaceFirst()方法:
String result = "a1b2c3".replaceAll("\\d", "X"); // 输出 "aXbXcX"
String result2 = "a1b2c3".replaceFirst("\\d", "X"); // 输出 "aXb2c3"
特殊字符处理
需要转义的特殊字符包括:[ ] { } ( ) \ ^ $ | ? * + .
// 匹配真实的点号(.)需要转义
Pattern p = Pattern.compile("\\.");
预编译优化
频繁使用的正则表达式应该预编译:
private static final Pattern EMAIL_PATTERN =
Pattern.compile("^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$");
常用正则示例
- 邮箱验证:
^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$ - 手机号验证(中国):
^1[3-9]\\d{9}$ - 身份证号验证:
^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[0-9Xx]$ - URL提取:
https?://[\\w./?=&%-]+







