Java正则表达式:带代码示例的完整指南
正则表达式(regex)是一种强大的工具,用于按模式搜索、提取和替换文本。在Java中,正则表达式的处理通过两个主要类实现:java.util.regex.Pattern(模式编译)和java.util.regex.Matcher(执行搜索)。本文将讲解语法、主要方法,并通过实战示例帮助您在真实项目中自信地使用正则表达式。
1. Java正则表达式基础
在进入示例之前,我们先了解关键类及其交互方式。
Pattern类
Pattern是正则表达式的编译表示。它通过静态方法Pattern.compile()创建。未经编译无法使用正则表达式。
Matcher类
Matcher是“引擎”,负责在字符串中按指定模式执行搜索。通过pattern.matcher(inputString)方法创建。
元字符基本语法
.— 任意字符(除换行符外)\\d— 数字(0-9)\\w— 字母、数字或下划线\\s— 空白字符^— 字符串开头$— 字符串结尾*— 0次或多次重复+— 1次或多次重复?— 0次或1次重复{n,m}— 重复n到m次[]— 字符集(例如[a-z]表示任意小写字母)()— 捕获组
示例1:简单电话号码验证
import java.util.regex.*;
public class PhoneValidator { public static void main(String[] args) { String phone = "+7 (999) 123-45-67"; String regex = "^\\\\+7\\\\s\\\\(\\\\d{3}\\\\)\\\\s\\\\d{3}-\\\\d{2}-\\\\d{2}$"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(phone); if (matcher.matches()) { System.out.println("号码格式正确"); } else { System.out.println("号码格式不正确"); } }}2. Matcher方法:matches()、find()与捕获组
理解matches()和find()的区别是成功使用Java正则表达式的关键。
matches()— 检查整个字符串是否完全匹配模式(隐式添加^和$)。find()— 在字符串任意位置搜索匹配模式的子串。group()— 返回匹配结果或捕获组的值。
示例2:使用find()和捕获组从文本中提取邮箱地址
import java.util.regex.*;
public class EmailExtractor { public static void main(String[] args) { String text = "联系方式:support@example.com, info@test.org 和 admin@site.net。"; String regex = "([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+)\\\\.([a-zA-Z]{2,})"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(text); while (matcher.find()) { System.out.println("完整邮箱:" + matcher.group()); System.out.println("用户名:" + matcher.group(1)); System.out.println("域名:" + matcher.group(2)); System.out.println("顶级域:" + matcher.group(3)); System.out.println("---"); } }}示例3:使用matches()验证密码
要求:8到20个字符,至少一个大写字母,至