Java中的正则表达式:从基础到高级应用
正则表达式(regex)是一种强大的文本处理工具,能够通过复杂模式执行字符串的搜索、替换和验证。Java通过java.util.regex包支持正则表达式,该包提供了两个主要类:Pattern(编译模式)和Matcher(执行搜索/替换操作)。
本文将讲解如何在Java中高效使用正则表达式,从基本语法开始,到实际开发中的真实案例。
1. Java正则表达式基础语法
在进入Java代码之前,掌握正则表达式的基本元字符很重要:
.— 任意单个字符(除换行符外)\\d— 任意数字(0-9)\\w— 字母、数字或下划线\\s— 空白字符(空格、制表符、换行符)*— 前一个字符出现0次或多次+— 前一个字符出现1次或多次?— 前一个字符出现0次或1次(使字符可选)^— 字符串开头$— 字符串结尾[...]— 字符类(例如[a-z]— 所有小写字母)(...)— 捕获组
重要提示:在Java中,包含正则表达式的字符串需要双重转义。例如,要使用\\d,在代码中需写成"\\\\d"。这是因为反斜杠首先由Java编译器处理,然后才传递给regex引擎。
2. Pattern和Matcher类——Java中regex操作的基础
Java中正则表达式的基本工作流程包含三个步骤:
- 通过编译模式字符串创建
Pattern对象 - 在需要检查的字符串上调用
matcher()方法创建Matcher对象 - 执行操作——搜索、匹配、替换
示例1:检查整个字符串是否匹配
import java.util.regex.Pattern;import java.util.regex.Matcher;
public class RegexExample { public static void main(String[] args) { // 检查字符串是否为有效的电子邮件地址 String email = "user@example.com"; String emailPattern = "^[A-Za-z0-9+_.-]+@(.+)$"; Pattern pattern = Pattern.compile(emailPattern); Matcher matcher = pattern.matcher(email); if (matcher.matches()) { System.out.println("Email有效"); } else { System.out.println("Email无效"); } }}matches()方法尝试将模式与整个字符串进行匹配。如果需要检查字符串是否包含与模式匹配的内容(不一定是完全匹配),则使用find()方法。
示例2:查找字符串中所有匹配的模式
import java.util.regex.Pattern;import java.util.regex.Matcher;
public class FindExample { public static void main(String[] args) { String text = "Java 8, Java 11, Java 17 — 这些是Java语言的版本"; String regex = "Java\\\\s+\\\\d+"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(text); while (matcher.find()) { System.out.println("找到: " + matcher.group() + " (位置: " + matcher.start() + "-" + matcher.end() + ")"); } }}执行结果:
找到: Java 8 (位置: 0-6)找到: Java 11 (位置: 8-15