2025年Java正则表达式教程:零基础也能看懂 – wiki基地

这是一篇为您准备的关于Java正则表达式的入门教程文章,内容涵盖了基础概念、核心语法以及Java代码实战,适合零基础读者。


2025年Java正则表达式教程:零基础也能看懂

在编程的世界里,处理文本是一项极其常见的任务。无论是校验用户输入的手机号、从一大段日志中提取错误信息,还是简单的查找替换,正则表达式 (Regular Expression) 都是你手中最锋利的瑞士军刀。

虽然已经到了2025年,AI编程助手层出不穷,但掌握正则表达式的原理,依然是每位Java开发者必修的基本功。本文将带你从零开始,彻底搞懂Java中的正则表达式。

1. 什么是正则表达式?

简单来说,正则表达式就是一个字符串模板。我们定义一个规则(比如:“由3个数字组成”),然后用这个规则去匹配目标字符串。

  • 规则\d{3} (表示连续3个数字)
  • 目标abc123xyz -> 匹配成功 (找到了 123)

2. Java正则的核心类

在 Java (java.util.regex 包) 中,有两个核心类是你必须认识的:

  1. Pattern (模式):正则表达式的编译表示。它负责解析你的正则字符串,类似于把图纸变造好的模具。
  2. Matcher (匹配器):用 Pattern 创建的模具,去匹配具体的文本。

2025 快速上手示例 (使用 Java 21+ 风格)

“`java
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class RegexDemo {
public static void main(String[] args) {
// 1. 定义规则:匹配所有的数字
String regex = “\d+”;
String content = “订单号:20250101,数量:50”;

    // 2. 编译正则
    Pattern pattern = Pattern.compile(regex);

    // 3. 创建匹配器
    Matcher matcher = pattern.matcher(content);

    // 4. 查找匹配结果
    while (matcher.find()) {
        System.out.println("找到数字: " + matcher.group());
    }
}

}
*输出结果:*text
找到数字: 20250101
找到数字: 50
“`

注意:在Java字符串中,反斜杠 \ 需要转义。所以正则表达式里的 \d (数字),在Java代码里必须写成 \\d

3. 核心语法速查表

掌握以下符号,你就能读懂90%的正则。

3.1 字符类 (匹配谁?)

符号 说明 示例
. 匹配除换行符以外的任意字符 a.c 匹配 abc, a@c
[abc] 字符集合,匹配 a 或 b 或 c [Cc]at 匹配 Cat, cat
[^abc] 否定集合,匹配除了 a, b, c 之外的字符 [^0-9] 匹配非数字
\d 数字 (Digit),等价于 [0-9] \d\d 匹配 25
\w 单词字符 (Word),包含字母/数字/下划线 user_\w 匹配 user_1
\s 空白字符 (Space),包含空格/制表符等 Hello\sWorld

3.2 量词 (匹配多少次?)

符号 说明 示例
* 0次 或 多次 zo* 匹配 z, zoo
+ 1次 或 多次 zo+ 匹配 zo, zoo (不匹配 z)
? 0次 或 1次 do(es)? 匹配 do, does
{n} 恰好 n 次 \d{4} 匹配 2025
{n,} 至少 n 次 \d{2,} 匹配 10, 100
{n,m} n 到 m 次 \d{1,3} 匹配 1, 12, 123

3.3 边界匹配 (在哪里匹配?)

  • ^ : 行首。 ^Java 匹配以Java开头的行。
  • $ : 行尾。 end$ 匹配以end结尾的行。

4. 进阶技巧:分组与贪婪

4.1 分组 ()

用小括号把一部分规则包起来,看作一个整体。
* (\d{4})-(\d{2})-(\d{2})
* 这个正则可以匹配日期 2025-12-19
* matcher.group(1) 将提取出 2025group(2) 提取出 12

4.2 贪婪 vs 非贪婪

默认情况下,正则也是“贪婪”的,会尽可能多地匹配。
* 文本:<div>test</div><div>demo</div>
* 正则:<div>.*</div>
* 贪婪匹配结果:<div>test</div><div>demo</div> (直接匹配到最后一个 </div>)

如果你只想匹配第一个 </div>,需要在量词后加 ? 变为非贪婪模式
* 正则:<div>.*?</div>
* 非贪婪匹配结果:<div>test</div> (遇到第一个结束符就停止)

5. Java 实战常用案例

校验手机号 (中国大陆)

java
public static boolean isMobile(String phone) {
// 规则:1开头,第二位3-9,后面9位数字
String regex = "^1[3-9]\\d{9}$";
return Pattern.matches(regex, phone);
}

校验电子邮箱

java
public static boolean isEmail(String email) {
// 简单版规则
String regex = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
return Pattern.matches(regex, email);
}

字符串替换 (脱敏处理)

java
String phone = "13812345678";
// 替换中间4位为 ****
// group(1)是前3位,group(2)是后4位
String result = phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
System.out.println(result); // 输出:138****5678

6. 总结

2025年,虽然工具在变,但数据的本质没有变。掌握正则表达式,能让你在处理字符串时不再使用笨拙的 indexOfsubstring 拼凑逻辑。

学习建议
1. 多练:不要死记硬背,使用在线工具(如 regex101)实时测试你的表达式。
2. 由简入繁:先把大规则写出来,再逐步细化边界条件。
3. 注意性能:避免在极长文本中使用复杂的嵌套量词,防止“回溯”导致的性能问题。

希望这篇文章能帮你敲开正则的大门!

滚动至顶部