一、常见正则表达式整理
1. 基础验证类
- 邮箱地址
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$
(匹配如[email protected]
) - 手机号
^1[3-9]\\\\d{9}$
(匹配国内11位手机号,如13812345678
) - 中文字符
^[\u4e00-\u9fa5]+$
(匹配纯中文字符串,如你好
) - 密码强度
^(?=.*[a-zA-Z])(?=.*\\d).{8,20}$
(至少含字母和数字,长度8-20位)
2. 数据格式类
- 日期(YYYY-MM-DD)
^\\d{4}-\\d{2}-\\d{2}$
- 浮点数
^-?\\d+(\\.\\d+)?$
(支持正负数及可选小数部分) - URL
^(https?:冒险一下)://(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#?&//=]{2,256}\\. [a-z]{2,6}\\b(?:[-a-zA-Z0-9@:%._\\+~#?&//=]*)$
(匹配带协议的完整URL)
3. 文件与路径类
- 文件扩展名(如.jpg)
\\\\.(jpg|png|gif)$
(匹配以特定扩展名结尾的文件)
二、Java正则表达式使用示例
1. 邮箱匹配
java
import java.util.regex.*;
public class EmailExample {
public static void main(String[] args) {
String regex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\. [a-zA-Z]{2,}$";
String input = "[email protected]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
if (matcher.matches()) {
System.out.println("邮箱有效");
} else {
System.out.println("邮箱无效");
}
}
}
- 解释:
^
和$
确保全字符串匹配,\\.
转义点号,{2,}
匹配顶级域名长度。
2. 提取中文字符
java
public class ChineseExtract {
public static void main(String[] args) {
String input = "Hello 你好!欢迎使用正则表达式。";
String regex = "[\\u4e00-\\u9fa5]+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println("提取到中文:" + matcher.group()); // 输出 "你好" 和 "欢迎使用正则表达式"
}
}
}
- 解释:
\\u4e00-\\u9fa5
匹配Unicode范围内的中文字符。
3. 替换字符串中的空格
java
public class SpaceReplace {
public static void main(String[] args) {
String input = " Java 正则表达式 示例 ";
String regex = "\\s+"; // 匹配一个或多个空格
String result = input.replaceAll(regex, " ").trim();
System.out.println(result); // 输出 "Java 正则表达式 示例"
}
}
- 解释:
\\s+
匹配连续空白字符,replaceAll
替换为单个空格。
4. 验证手机号
java
public class PhoneValidation {
public static void main(String[] args) {
String regex = "^1[3-9]\\\\d{9}$";
String phone = "13812345678";
boolean isValid = phone.matches(regex);
System.out.println("手机号是否有效:" + isValid); // 输出 true
}
}
- 解释:
1
开头,第二位3-9,后接9位数字。
三、注意事项与优化建议
- 转义字符:Java中需双反斜杠(如
\\d
表示数字)。 - 预编译:高频使用的正则表达式应预编译为
Pattern
对象(如Pattern.compile(regex)
)。 - 避免回溯:减少
.*
等贪婪匹配,优先用精确范围(如\\d{4}
代替.*
)。 - 性能敏感场景:使用
Matcher.find()
代替String.matches()
提升效率。
四、总结
Java正则表达式通过 java.util.regex
包实现,涵盖匹配、替换、验证等操作。合理使用分组、量词和边界符可增强表达式灵活性。实际开发中需结合具体需求选择模式,并注意性能优化。