文章目录
- [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)
- [3.1 `.` 任意字符](#3.1
- [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. 常见应用场景 🚀
-
手机号验证
java^\d{11}$👉 表示必须是 11 位数字。
-
用户名(字母开头,后面可以是字母/数字/下划线,长度 6~12)
java^[a-zA-Z]\w{5,11}$ -
去掉字符串里的所有空格
javastr.replaceAll("\\s+", "");
5. 🎤 互动练习
- 用正则匹配一个 四位数的年份 (如
2025)。
👉 提示:\d{4} - 匹配一个 不包含数字的单词 。
👉 提示:^\D+$ - 写一个正则,匹配合法的 变量名 (字母或下划线开头,后面是字母/数字/下划线)。
👉 提示:^[a-zA-Z_]\w*$