Java 正则表达式之应用技巧

Java 正则表达式之应用技巧

基本语法与匹配规则

Java 正则表达式通过 java.util.regex 包实现,核心类为 PatternMatcher。以下为基本匹配示例:

Pattern pattern = Pattern.compile("a.b"); // 匹配任意单个字符 between 'a' and 'b'
Matcher matcher = pattern.matcher("a2b");
System.out.println(matcher.matches()); // 输出 true

分组与捕获

使用 () 实现分组捕获,$n 引用分组:

String text = "2023-08-20";
Pattern datePattern = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})");
Matcher dateMatcher = datePattern.matcher(text);
if (dateMatcher.find()) {
    System.out.println("Year: " + dateMatcher.group(1)); // 输出 2023
    System.out.println("Month: " + dateMatcher.group(2)); // 输出 08
}

贪婪与非贪婪匹配

默认贪婪模式可通过 ? 改为非贪婪:

Pattern greedy = Pattern.compile("a.*b"); // 匹配 "aabab" 整个字符串
Pattern lazy = Pattern.compile("a.*?b"); // 匹配 "aab" 和 "ab"

预编译优化

频繁使用的正则表达式应预编译:

private static final Pattern EMAIL_PATTERN = Pattern.compile("^[\\w.-]+@[\\w.-]+\\.[a-z]{2,}$");
// 后续直接调用 EMAIL_PATTERN.matcher(email).matches()

边界匹配

^$ 匹配行首行尾,\b 匹配单词边界:

Pattern startWithNum = Pattern.compile("^\\d.*"); // 匹配以数字开头的行
Pattern wholeWord = Pattern.compile("\\bjava\\b"); // 匹配独立单词 "java"

常用验证场景

邮箱验证

String emailRegex = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$";
Pattern.compile(emailRegex).matcher("[email protected]").matches();

手机号验证(中国大陆):

String phoneRegex = "^1[3-9]\\d{9}$";
Pattern.compile(phoneRegex).matcher("13812345678").matches();

字符串替换

使用 replaceAll() 实现复杂替换:

String masked = "Card: 1234-5678-9012-3456"
    .replaceAll("\\d{4}-\\d{4}-\\d{4}-(\\d{4})", "****-****-****-$1");
// 输出: Card: ****-****-****-3456

性能优化建议
  1. 避免嵌套量词如 (a+)+,可能引发回溯爆炸
  2. 优先使用字符类 [abc] 而非分组 (a|b|c)
  3. 复杂匹配可拆分为多个简单正则组合处理

通过合理应用这些技巧,可以显著提升正则表达式的效率和可维护性。

你可能感兴趣的:(java,正则表达式,mysql)