java 如何用正则表达式
正则表达式基础语法
Java中使用正则表达式主要通过java.util.regex包下的Pattern和Matcher类实现。基本语法如下:
^匹配字符串开头$匹配字符串结尾.匹配任意单个字符(除换行符)\d匹配数字(等价于[0-9])\D匹配非数字\w匹配字母、数字或下划线\W匹配非字母、数字或下划线[abc]匹配方括号内的任意字符[^abc]匹配不在方括号内的任意字符a|b匹配a或b*匹配前一个字符0次或多次+匹配前一个字符1次或多次?匹配前一个字符0次或1次{n}匹配前一个字符恰好n次{n,}匹配前一个字符至少n次{n,m}匹配前一个字符n到m次
创建Pattern对象
通过Pattern.compile()方法创建正则表达式模式对象:

Pattern pattern = Pattern.compile("正则表达式");
例如匹配邮箱的正则:
Pattern emailPattern = Pattern.compile("^[\\w.-]+@[\\w.-]+\\.[a-z]{2,}$");
使用Matcher进行匹配
通过pattern.matcher()方法创建匹配器对象:

Matcher matcher = pattern.matcher("要匹配的字符串");
boolean isMatch = matcher.matches(); // 完全匹配
或者使用find()方法查找部分匹配:
while(matcher.find()) {
System.out.println("找到匹配: " + matcher.group());
}
常用正则表达式示例
- 验证手机号(中国大陆):
Pattern phonePattern = Pattern.compile("^1[3-9]\\d{9}$");
- 提取HTML标签中的内容:
Pattern htmlPattern = Pattern.compile("<.*?>(.*?)</.*?>");
Matcher htmlMatcher = htmlPattern.matcher("<p>Hello</p>");
if(htmlMatcher.find()) {
System.out.println(htmlMatcher.group(1)); // 输出Hello
}
- 分割字符串:
String[] parts = "a,b,c".split("\\s*,\\s*");
- 替换字符串:
String result = "a1b2c3".replaceAll("\\d", "-");
捕获组的使用
使用括号()定义捕获组:
Pattern datePattern = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})");
Matcher dateMatcher = datePattern.matcher("2023-05-20");
if(dateMatcher.matches()) {
String year = dateMatcher.group(1); // 2023
String month = dateMatcher.group(2); // 05
String day = dateMatcher.group(3); // 20
}
性能优化建议
- 预编译常用正则表达式模式,避免重复编译
- 对于简单匹配,可以直接使用String类的
matches()方法 - 避免过度复杂的正则表达式,必要时分步处理
- 考虑使用边界匹配器
\b提高精确度
常见问题处理
- 转义特殊字符时需要使用双反斜杠:
// 匹配点号
Pattern dotPattern = Pattern.compile("\\.");
- 处理多行文本时使用
Pattern.MULTILINE标志:
Pattern multiLinePattern = Pattern.compile("^start", Pattern.MULTILINE);
- 忽略大小写匹配:
Pattern caseInsensitivePattern = Pattern.compile("abc", Pattern.CASE_INSENSITIVE);






