插件窝 干货文章 Java正则表达式语法详解 - 从基础到高级用法完整指南

Java正则表达式语法详解 - 从基础到高级用法完整指南

Java正则表达式语法详解

什么是正则表达式?

正则表达式(Regular Expression)是一种强大的文本处理工具,使用特定语法模式来描述、匹配和操作字符串。在Java中通过java.util.regex包提供正则表达式支持。

基础语法元素

1. 字符匹配

  • . - 匹配任意单个字符(除换行符)
  • \d - 匹配数字字符,等价于[0-9]
  • \D - 匹配非数字字符
  • \w - 匹配单词字符(字母、数字、下划线)
  • \W - 匹配非单词字符
  • \s - 匹配空白字符
  • \S - 匹配非空白字符

2. 字符类

  • [abc] - 匹配a、b或c中的任意一个字符
  • [^abc] - 匹配除a、b、c外的任意字符
  • [a-zA-Z] - 匹配任意字母字符

3. 量词

  • * - 匹配0次或多次
  • + - 匹配1次或多次
  • ? - 匹配0次或1次
  • {n} - 匹配恰好n次
  • {n,} - 匹配至少n次
  • {n,m} - 匹配n到m次

4. 边界匹配

  • ^ - 匹配字符串开始
  • $ - 匹配字符串结束
  • \b - 匹配单词边界
  • \B - 匹配非单词边界

Java中的正则表达式使用

Pattern和Matcher类

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class RegexExample {
    public static void main(String[] args) {
        String text = "Hello Java Regex 2023";
        String patternString = "\\d+"; // 匹配数字
        
        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(text);
        
        while (matcher.find()) {
            System.out.println("找到数字: " + matcher.group());
        }
    }
}

String类的正则方法

  • matches(String regex) - 判断字符串是否匹配正则表达式
  • split(String regex) - 根据正则表达式分割字符串
  • replaceAll(String regex, String replacement) - 替换所有匹配项
  • replaceFirst(String regex, String replacement) - 替换第一个匹配项

常用正则表达式示例

1. 邮箱验证

String emailRegex = "^[\\w.-]+@[\\w.-]+\\.[a-zA-Z]{2,}$";

2. 手机号验证

String phoneRegex = "^1[3-9]\\d{9}$";

3. 身份证验证

String idCardRegex = "^[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]$";

高级特性

分组和捕获

String text = "John:30,Alice:25";
Pattern pattern = Pattern.compile("(\\w+):(\\d+)");
Matcher matcher = pattern.matcher(text);

while (matcher.find()) {
    System.out.println("姓名: " + matcher.group(1) + ", 年龄: " + matcher.group(2));
}

非捕获分组

// 使用(?:pattern)进行非捕获分组
String regex = "(?:http|https)://([^/]+)/";

前瞻和后顾

  • (?=pattern) - 正向前瞻
  • (?!pattern) - 负向前瞻
  • (?<=pattern) - 正向后顾
  • (? - 负向后顾

性能优化建议

  • 预编译常用的正则表达式模式
  • 避免过度使用复杂的正则表达式
  • 使用非贪婪匹配量词(*?, +?, ??)
  • 合理使用字符类代替选择符

常见问题解答

Q: 如何在正则表达式中转义特殊字符?

A: 使用反斜杠\\进行转义,例如\\.匹配实际的点字符。

Q: 正则表达式匹配区分大小写吗?

A: 默认区分大小写,可以使用(?i)标志开启不区分大小写模式。

Q: 如何匹配多行文本?

A: 使用(?m)标志或Pattern.MULTILINE模式。

通过掌握Java正则表达式,您可以高效地处理各种字符串匹配、验证和替换需求,大大提升开发效率。