Java 正则表达式规则

什么是正则表达式

正则表达式是一种用于匹配和处理字符串的强大工具。它是通过一种特定的语法规则来描述字符串模式的。在Java中,我们可以使用正则表达式来进行字符串的匹配、替换、分割等操作。正则表达式在文本处理、表单验证、数据提取等场景中都有广泛应用。

正则表达式的基本规则

正则表达式由普通字符和特殊字符组成。普通字符表示精确匹配,特殊字符则表示特定的模式或操作。

普通字符

普通字符是指除了特殊字符以外的所有字符。例如,正则表达式 java 匹配的是包含 "java" 的字符串。

特殊字符

特殊字符在正则表达式中具有特殊的含义,常用的特殊字符有:

  • .: 匹配任意单个字符,除了换行符。
  • []: 匹配方括号中的任意一个字符。
  • [^]: 匹配除了方括号中的字符以外的任意一个字符。
  • -: 匹配某个范围内的字符,如 [a-z] 表示匹配小写字母。
  • *: 匹配前面的字符零次或多次。
  • +: 匹配前面的字符一次或多次。
  • ?: 匹配前面的字符零次或一次。
  • |: 匹配两个或多个表达式中的一个。
  • (): 标记一个子表达式的开始和结束位置。

限定符

限定符用于指定匹配的次数。

  • {n}: 匹配前面的字符恰好 n 次。
  • {n,}: 匹配前面的字符至少 n 次。
  • {n,m}: 匹配前面的字符至少 n 次,但不超过 m 次。

转义字符

在正则表达式中,有些字符有特殊含义,如果要匹配这些特殊字符本身,需要使用转义字符 \

例如,正则表达式 \\d 表示匹配数字。

正则表达式的使用

在Java中,我们可以使用 java.util.regex 包下的类来进行正则表达式的匹配操作。常用的类有 PatternMatcher

正则表达式的编译

在使用正则表达式之前,我们需要先将其编译为 Pattern 对象。

String regex = "java";
Pattern pattern = Pattern.compile(regex);

正则表达式的匹配

编译完成后,我们可以使用 Matcher 对象来进行匹配操作。

String text = "I love java programming.";
Matcher matcher = pattern.matcher(text);

if (matcher.find()) {
    System.out.println("匹配成功");
} else {
    System.out.println("未匹配到");
}

正则表达式的分组

可以使用 () 来标记一个子表达式,然后通过 group() 方法获取匹配的结果。

String text = "My phone number is 123-4567890.";
String regex = "(\\d{3})-(\\d{7})";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);

if (matcher.find()) {
    String phoneNumber = matcher.group();
    String areaCode = matcher.group(1);
    String number = matcher.group(2);
    System.out.println("Phone number: " + phoneNumber);
    System.out.println("Area code: " + areaCode);
    System.out.println("Number: " + number);
}

输出结果为:

Phone number: 123-4567890
Area code: 123
Number: 4567890

正则表达式的替换

可以使用 replaceAll() 方法将匹配的字符串替换为指定的字符串。

String text = "Hello, Java!";
String regex = "Java";
String replacement = "JavaScript";
String replacedText = text.replaceAll(regex, replacement);
System.out.println(replacedText);

输出结果为:

Hello, JavaScript!

正则表达式的分割

可以使用 split() 方法将字符串分割