> 技术文档 > Pattern正则表达式知识点

Pattern正则表达式知识点


Pattern正则表达式知识点
在 Java 中,Patternjava.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 的使用,能高效处理各种字符串复杂逻辑,是数据校验、文本处理等场景的重要工具。