当前位置: 首页 > news >正文

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 的使用,能高效处理各种字符串复杂逻辑,是数据校验、文本处理等场景的重要工具。

http://www.dtcms.com/a/297756.html

相关文章:

  • 第二十天(正则表达式与功能实际运用)
  • VUE 学习笔记6 vue数据监测原理
  • 设计模式十:单件模式 (Singleton Pattern)
  • 空间信息与数字技术专业能从事什么工作?
  • 【LeetCode数据结构】二叉树的应用(二)——二叉树的前序遍历问题、二叉树的中序遍历问题、二叉树的后序遍历问题详解
  • uniapp创建vue3+ts+pinia+sass项目
  • 2025年RISC-V中国峰会 主要内容
  • 绘图库 Matplotlib Search
  • RISC-V VP、Gem5、Spike
  • 恋爱时间倒计时网页设计与实现方案
  • 借助Aspose.HTML控件,在 Python 中将 SVG 转换为 PDF
  • Vue nextTick
  • 基于超176k铭文数据,谷歌DeepMind发布Aeneas,首次实现古罗马铭文的任意长度修复
  • MySQL存储引擎深度解析与实战指南
  • Java面试题及详细答案120道之(001-020)
  • JAVA_FIFTEEN_异常
  • LeetCode 233:数字 1 的个数
  • Zero-Shot TrackingT0:对象分割+运动感知记——当“切万物”武士学会运动记忆,目标跟踪稳如老狗
  • 力扣面试150题--寻找旋转排序数组中的最小值
  • 互联网金融项目实战(大数据Hadoop hive)
  • 代码随想录算法训练营第五十三天|图论part4
  • Hive【Hive架构及工作原理】
  • Hive-vscode-snippets
  • 微信小程序文件下载与预览功能实现详解
  • nacos安装
  • SpringBoot配置多数据源多数据库
  • Androidstudio 上传当前module 或本地jar包到maven服务器。
  • 线性代数 上
  • Java 大视界 -- 基于 Java 的大数据分布式存储在工业互联网数据管理与边缘计算协同中的创新实践(364)
  • 从入门到进阶:JavaScript 学习之路与实战技巧