Java正则表达式基础编写案例
基础正则表达式语法
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexBasicDemo {
public static void main(String[] args) {
// 1. 基础匹配
String text = "Hello123World456";
Pattern pattern = Pattern.compile("\\d+"); // 匹配数字
Matcher matcher = pattern.matcher(text);
// 查找匹配
while (matcher.find()) {
System.out.println("找到数字: " + matcher.group());
}
}
}
常用匹配模式示例
public class RegexPatterns {
public static void main(String[] args) {
// 2.1 匹配字符串是否包含字母
String str1 = "abc123";
boolean hasLetter = str1.matches(".*[a-zA-Z]+.*");
System.out.println("包含字母: " + hasLetter); // true
// 2.2 验证邮箱格式
String email = "test@example.com";
boolean isValidEmail = email.matches("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$");
System.out.println("有效邮箱: " + isValidEmail); // true
// 2.3 验证手机号
String phone = "13800138000";
boolean isValidPhone = phone.matches("^1[3-9]\\d{9}$");
System.out.println("有效手机号: " + isValidPhone); // true
// 2.4 验证密码强度(至少8位,包含大小写字母和数字)
String password = "Password123";
boolean isStrongPassword = password.matches("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d).{8,}$");
System.out.println("密码强度合格: " + isStrongPassword); // true
}
}
实用案例
public class RegexUseCases {
// 3.1 提取所有数字
public static void extractNumbers(String text) {
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(text);
System.out.println("提取数字:");
while (matcher.find()) {
System.out.println(matcher.group());
}
}
// 3.2 替换敏感信息
public static String maskPhoneNumber(String text) {
// 将手机号中间4位替换为****
return text.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
}
// 3.3 分割字符串
public static void splitByRegex(String text) {
// 按非字母字符分割
String[] parts = text.split("[^a-zA-Z]+");
System.out.println("分割结果:");
for (String part : parts) {
if (!part.isEmpty()) {
System.out.println(part);
}
}
}
// 3.4 验证身份证号
public static boolean isValidIDCard(String idCard) {
// 简单验证:18位数字或17位数字+X
return idCard.matches("^[1-9]\\d{5}(19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[0-9Xx]$");
}
public static void main(String[] args) {
// 测试提取数字
extractNumbers("订单号:12345, 金额:789元");
// 测试替换手机号
String text = "联系我:13800138000";
System.out.println("掩码后: " + maskPhoneNumber(text));
// 测试分割
splitByRegex("Hello123World!@#$Test");
// 测试身份证验证
String idCard = "110101199003071234";
System.out.println("身份证有效: " + isValidIDCard(idCard));
}
}
常见正则表达式速查表
public class RegexCheatsheet {
public static void main(String[] args) {
// 常用正则表达式
String[][] patterns = {
// 类别, 正则表达式, 说明
{"邮箱", "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$", "标准邮箱格式"},
{"手机号", "^1[3-9]\\d{9}$", "中国大陆手机号"},
{"身份证", "^\\d{17}[\\dXx]$", "18位身份证号"},
{"URL", "^(https?://)?[\\w.-]+\\.[a-zA-Z]{2,}(/\\S*)?$", "URL链接"},
{"IP地址", "^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$", "IPv4地址"},
{"中文字符", "^[\\u4e00-\\u9fa5]+$", "纯中文"},
{"英文字母", "^[a-zA-Z]+$", "纯英文"},
{"数字", "^\\d+$", "纯数字"},
{"日期", "^\\d{4}-\\d{2}-\\d{2}$", "YYYY-MM-DD格式"},
{"时间", "^([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d$", "HH:mm:ss格式"}
};
System.out.println("===== 常用正则表达式速查表 =====");
System.out.printf("%-10s %-40s %-20s%n", "类型", "正则表达式", "说明");
System.out.println("-".repeat(70));
for (String[] pattern : patterns) {
System.out.printf("%-10s %-40s %-20s%n", pattern[0], pattern[1], pattern[2]);
}
}
}
Pattern类和Matcher类常用方法
public class PatternMatcherMethods {
public static void main(String[] args) {
String text = "Java Java Java, Programming";
// Pattern类方法
Pattern pattern = Pattern.compile("Java", Pattern.CASE_INSENSITIVE); // 忽略大小写
// Matcher类方法
Matcher matcher = pattern.matcher(text);
// 5.1 find() - 查找匹配
System.out.println("=== find()示例 ===");
while (matcher.find()) {
System.out.println("找到: " + matcher.group() +
", 位置: " + matcher.start() + "-" + matcher.end());
}
// 5.2 matches() - 完全匹配
System.out.println("\n=== matches()示例 ===");
boolean isMatch = Pattern.matches("Java.*", "Java Programming");
System.out.println("完全匹配: " + isMatch); // true
// 5.3 lookingAt() - 从开头匹配
System.out.println("\n=== lookingAt()示例 ===");
matcher = Pattern.compile("Java").matcher("Java Programming");
System.out.println("开头匹配: " + matcher.lookingAt()); // true
// 5.4 replace系列方法
System.out.println("\n=== replace()示例 ===");
String result = text.replaceAll("Java", "Python");
System.out.println("替换结果: " + result);
// 5.5 分组功能
System.out.println("\n=== 分组示例 ===");
Pattern groupPattern = Pattern.compile("(\\d{3})-(\\d{4})-(\\d{4})");
Matcher groupMatcher = groupPattern.matcher("010-1234-5678");
if (groupMatcher.find()) {
System.out.println("区号: " + groupMatcher.group(1)); // 010
System.out.println("前缀: " + groupMatcher.group(2)); // 1234
System.out.println("号码: " + groupMatcher.group(3)); // 5678
}
}
}
实际应用示例:日志解析
public class LogParser {
public static void parseLogLine(String logLine) {
// 解析格式: [2024-01-15 10:30:00] [ERROR] 用户登录失败: 用户名=admin
String regex = "\\[(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})\\] \\[(\\w+)\\] (.+)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(logLine);
if (matcher.matches()) {
String timestamp = matcher.group(1);
String level = matcher.group(2);
String message = matcher.group(3);
System.out.println("时间戳: " + timestamp);
System.out.println("日志级别: " + level);
System.out.println("消息内容: " + message);
}
}
public static void main(String[] args) {
String log = "[2024-01-15 10:30:00] [ERROR] 用户登录失败: 用户名=admin";
parseLogLine(log);
}
}
使用建议
- 性能优化:频繁使用的正则表达式应编译为Pattern对象
- 转义处理:在Java字符串中使用表示正则中的
- 复杂正则:使用非捕获组提高性能
- 测试验证:使用在线正则测试工具先验证表达式
- 边界匹配:注意使用和确保精确匹配

版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播