Pattern正则表达式知识点
Pattern正则表达式知识点
在 Java 中,Pattern
是java.util.regex
包下的核心类,用于表示正则表达式的编译表示形式,主要与Matcher
配合使用,实现对字符串的正则匹配、查找、替换等操作。
1. 核心作用
- 编译正则表达式字符串,生成一个可复用的
Pattern
对象(正则表达式的编译形式)。 - 提供正则匹配相关的工具方法,是处理字符串正则操作的基础。
2. 基本使用流程
正则处理的典型步骤:
编译正则 → 创建匹配器 → 执行匹配操作
import java.util.regex.Pattern;
import java.util.regex.Matcher;public class PatternDemo {public static void main(String[] args) {// 1. 定义正则表达式(匹配邮箱格式)String regex = "^[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z0-9]+)+$";// 2. 编译正则表达式,生成 Pattern 对象(线程安全,可复用)Pattern pattern = Pattern.compile(regex);// 3. 创建 Matcher 对象,关联要匹配的字符串String email = "test@example.com";Matcher matcher = pattern.matcher(email);// 4. 执行匹配操作(返回是否完全匹配)boolean isMatch = matcher.matches();System.out.println("是否为有效邮箱:" + isMatch); // 输出:true}
}
3. 核心方法
(1)编译正则表达式
// 基本编译方法
static Pattern compile(String regex)// 带匹配模式的编译(如忽略大小写)
static Pattern compile(String regex, int flags)
常用 flags(匹配模式):
Pattern.CASE_INSENSITIVE
:忽略大小写(如a
匹配A
)Pattern.MULTILINE
:多行模式(^
匹配行首,$
匹配行尾)Pattern.DOTALL
:.
匹配所有字符(包括换行符\n
)
(2)字符串匹配与查找
// 创建 Matcher 对象(关联目标字符串)
Matcher matcher(CharSequence input)// 快速判断字符串是否完全匹配正则(等效于 matcher.matches())
boolean matches(CharSequence input)// 查找字符串中是否包含匹配的子串
boolean find()
(3)字符串替换
// 替换所有匹配的子串
String replaceAll(String replacement)// 替换第一个匹配的子串
String replaceFirst(String replacement)
(4)其他常用方法
// 分割字符串(根据正则匹配结果分割)
String[] split(CharSequence input)// 获取正则表达式的分组数量
int groupCount()// 返回编译后的正则表达式字符串
String pattern()
4. 关键特性
- 线程安全:
Pattern
对象是线程安全的,可在多线程中共享复用。 - 编译一次,多次使用:正则表达式编译过程较耗时,复用
Pattern
对象可提高性能。 - 与 Matcher 配合:
Pattern
负责编译正则,Matcher
负责具体匹配操作(状态化,非线程安全)。
5. 常见应用场景
- 数据校验:验证手机号、邮箱、身份证号等格式(如上述邮箱示例)。
- 字符串提取:从文本中提取符合规则的内容(如提取 URL、提取数字)。
// 提取字符串中的所有数字 String text = "订单123金额456.78元"; Pattern numPattern = Pattern.compile("\\d+\\.?\\d*"); Matcher numMatcher = numPattern.matcher(text);while (numMatcher.find()) {System.out.println("找到数字:" + numMatcher.group()); // 输出:123、456.78 }
- 字符串替换:清理文本中的特殊字符、敏感词替换等。
// 替换所有空格为逗号 String text = "a b c d"; String result = Pattern.compile(" ").matcher(text).replaceAll(","); // 结果:a,b,c,d
- 字符串分割:按复杂规则分割字符串(比
String.split()
更灵活)。// 按多个空格或逗号分割 String text = "a , b,, c d"; String[] parts = Pattern.compile("[ ,]+").split(text); // 结果:["a", "b", "c", "d"]
6. 注意事项
- 正则表达式语法:需遵循 Java 正则规则(如转义字符需用
\\
,而非\
)。 - 性能问题:复杂正则或大量文本匹配时,需注意优化正则表达式(避免贪婪匹配过度回溯)。
- Matcher 状态:
Matcher
对象有状态(记录匹配位置),多次使用时需注意重置(matcher.reset()
)。
总结
Pattern
是 Java 正则表达式的核心类,负责编译和管理正则规则,与 Matcher
配合实现字符串的匹配、提取、替换等操作。掌握 Pattern
的使用,能高效处理各种字符串复杂逻辑,是数据校验、文本处理等场景的重要工具。