一、基础元字符(用于匹配单个字符)
| 元字符 | 含义 | 示例 | ||
|---|---|---|---|---|
. |
匹配任意单个字符 (除换行符 \n,若开启多行模式则包含) |
a.c 匹配 abc、a&c、a c |
||
\d |
匹配数字 (等价于 [0-9]) |
\d{3} 匹配 123、999 |
||
\D |
匹配非数字 (等价于 [^0-9]) |
\D 匹配 a、$、 |
||
\w |
匹配字母、数字、下划线 (等价于 [a-zA-Z0-9_]) |
\w+ 匹配 user123、_name |
||
\W |
匹配非字母、数字、下划线 (等价于 [^a-zA-Z0-9_]) |
\W 匹配 @、#、空格 |
||
\s |
匹配空白字符 (空格、制表符 \t、换行符 \n 等) |
a\sb 匹配 a b、a\tb |
||
\S |
匹配非空白字符 | \S+ 匹配 hello、123 |
||
[] |
匹配方括号内的任意一个字符(支持范围和排除) | [a-z] 匹配 a-z 任意字母;[^0-9] 匹配非数字 |
||
| ` | ` | 逻辑或,匹配左右任意一个表达式 | `a | b匹配a或b` |
二、量词(用于指定字符 / 组的重复次数)
默认是贪婪模式,尽可能多匹配
| 量词 | 含义 | 示例 |
|---|---|---|
* |
匹配0 次或多次(尽可能多匹配,贪婪模式) | a* 匹配 ""、a、aaa |
+ |
匹配1 次或多次(贪婪模式) | a+ 匹配 a、aaa(不匹配 "") |
? |
匹配0 次或 1 次(贪婪模式) | a? 匹配 ""、a(不匹配 aa) |
{n} |
匹配恰好 n 次 | a{3} 匹配 aaa |
{n,} |
匹配至少 n 次(贪婪模式) | a{2,} 匹配 aa、aaa... |
{n,m} |
匹配n 到 m 次 (贪婪模式,m 省略则为至少 n 次) |
a{1,3} 匹配 a、aa、aaa |
*?/+?/??/{n,m}? |
非贪婪模式(尽可能少匹配) | a+? 匹配 a(在 aaa 中只取第一个 a) |
三、分组与捕获(用于将多个字符视为一个整体)
| 语法 | 含义 | 示例 |
|---|---|---|
(pattern) |
1.捕获组:将 pattern 视为一个整体,可通过索引引用匹配结果 2.将多个字符视为整体,配合量词使用 3.(情况1|情况2)表示多种情况的匹配范围 4.预查匹配项-自定义定位符-四、断言 |
(ab)+ 匹配 ab、abab;(a)(b) 中 group(1) 是 a,group(2) 是 b |
(?:pattern) |
非捕获组:仅将 pattern 视为整体,不单独捕获结果(用于优化性能) |
(?:ab)+ 匹配 abab,但无法单独获取 ab |
\n |
引用第 n 个捕获组的匹配结果(n 从 1 开始) |
(\d)a\1 匹配 1a1、2a2(不能匹配 1a2) |
四、断言(用于定位匹配的位置,不消耗字符)
| 断言 | 含义 | 示例 |
|---|---|---|
^ |
匹配字符串开头(多行模式下匹配行开头) | ^abc 匹配 abc123(不匹配 xabc) |
$ |
匹配字符串结尾(多行模式下匹配行结尾) | abc$ 匹配 123abc(不匹配 abcx) |
(?=pattern) |
正向先行断言:匹配位置后面 必须是 pattern |
a(?=b) 匹配 ab 中的 a(不匹配 ac 中的 a) |
(?!pattern) |
负向先行断言:匹配位置后面 必须不是 pattern |
a(?!b) 匹配 ac 中的 a(不匹配 ab 中的 a) |
(?<=pattern) |
正向后行断言:匹配位置前面 必须是 pattern |
(?<=a)b 匹配 ab 中的 b(不匹配 cb 中的 b) |
(?<!pattern) |
负向后行断言:匹配位置前面 必须不是 pattern |
(?<!a)b 匹配 cb 中的 b(不匹配 ab 中的 b) |
五、转义字符 \
- 用于匹配元字符本身 (如
.、*、+等),例如\.匹配小数点,\*匹配星号。 - 也用于激活特殊序列(如
\d、\w等)。