441. Java 正则表达式 - 预定义字符类

文章目录

  • [441. Java 正则表达式 - 预定义字符类](#441. Java 正则表达式 - 预定义字符类)
    • [1. 常用预定义字符类表 📖](#1. 常用预定义字符类表 📖)
    • [2. Java 字符串里的转义问题 ⚠️](#2. Java 字符串里的转义问题 ⚠️)
    • [3. 示例演示 🧪](#3. 示例演示 🧪)
      • [3.1 `.` 任意字符](#3.1 . 任意字符)
      • [3.2 `\d` 和 `\D`](#3.2 \d\D)
      • [3.3 `\s` 和 `\S`](#3.3 \s\S)
      • [3.4 `\w` 和 `\W`](#3.4 \w\W)
    • [4. 常见应用场景 🚀](#4. 常见应用场景 🚀)
    • [5. 🎤 互动练习](#5. 🎤 互动练习)

441. Java 正则表达式 - 预定义字符类

我们前面讲过 字符类 [] ,比如 [abc][^0-9] 这种。

不过很多时候,我们只想表达"数字""空格""单词字符"等常见模式。

👉 如果每次都写 [0-9][a-zA-Z0-9_],是不是太麻烦?

所以 Java 在 Pattern API 里提供了很多 预定义字符类,相当于常用的"速写符号"。


1. 常用预定义字符类表 📖

构造 描述 等价写法 示例
. 任意一个字符(可能或可能不匹配换行符) a.b 可以匹配 a1b, a@b, a b
\d 数字 digit [0-9] \d{3} 匹配三位数字 123
\D 非数字 non-digit [^0-9] \D+ 匹配 abc!
\s 空白字符 space [ \t\n\x0B\f\r] \s+ 匹配空格、换行、制表符
\S 非空白字符 non-space [^\s] \S+ 匹配单词 hello
\w 单词字符 word char [a-zA-Z_0-9] \w+ 匹配 hello123
\W 非单词字符 non-word [^\w] \W+ 匹配 #@!

👉 小技巧:

  • 小写:正向含义
  • 大写:取反(即相反含义)

2. Java 字符串里的转义问题 ⚠️

因为 Java 字符串也要用 \,所以在正则里写 \d,在 Java 源码中要写成 \\d

java 复制代码
private final String REGEX = "\\d"; // 匹配一个数字

但是如果你在 控制台输入 (比如 Scanner 读取字符串),就直接写 \d 就行,不用加双斜杠。


3. 示例演示 🧪

3.1 . 任意字符

java 复制代码
.
  • 输入:@ → 匹配成功
  • 输入:1 → 匹配成功
  • 输入:a → 匹配成功

👉 点号就是"通配符",但注意:默认情况下 不包括换行符


3.2 \d\D

java 复制代码
\d
  • 输入:1 → 匹配成功
  • 输入:a → ❌ 不匹配
java 复制代码
\D
  • 输入:1 → ❌ 不匹配
  • 输入:a → 匹配成功

👉 \d 专门抓数字,\D 就是"非数字"。


3.3 \s\S

java 复制代码
\s
  • 输入:空格 " " → 匹配成功
  • 输入:a → ❌ 不匹配
java 复制代码
\S
  • 输入:空格 " " → ❌ 不匹配
  • 输入:a → 匹配成功

👉 \s 用来匹配空格、换行、制表符;\S 则相反,匹配非空格。


3.4 \w\W

java 复制代码
\w
  • 输入:a → 匹配成功
  • 输入:1 → 匹配成功
  • 输入:_ → 匹配成功
  • 输入:! → ❌ 不匹配
java 复制代码
\W
  • 输入:! → 匹配成功
  • 输入:a → ❌ 不匹配

👉 \w 相当于"单词字符",包括字母、数字、下划线。

👉 \W 则是它的反义词:非字母、非数字、非下划线。


4. 常见应用场景 🚀

  1. 手机号验证

    java 复制代码
    ^\d{11}$

    👉 表示必须是 11 位数字。

  2. 用户名(字母开头,后面可以是字母/数字/下划线,长度 6~12)

    java 复制代码
    ^[a-zA-Z]\w{5,11}$
  3. 去掉字符串里的所有空格

    java 复制代码
    str.replaceAll("\\s+", "");

5. 🎤 互动练习

  1. 用正则匹配一个 四位数的年份 (如 2025)。
    👉 提示:\d{4}
  2. 匹配一个 不包含数字的单词
    👉 提示:^\D+$
  3. 写一个正则,匹配合法的 变量名 (字母或下划线开头,后面是字母/数字/下划线)。
    👉 提示:^[a-zA-Z_]\w*$