字符
Pattern |
Description |
x |
字符x |
\\ |
反斜线字符 |
\t |
制表符\u0009 |
\n |
新行(换行)符\u000A |
\r |
回车符\u000D |
\f |
换页符\u000C |
\a |
报警 (bell) 符\u0007 |
\e |
转义符\u001B |
字符类
Pattern |
Description |
[abc] |
a、b 或 c(简单类) |
[^abc] |
任何字符,除了 a、b 或 c(否定) |
[a-zA-Z] |
a 到 z 或 A 到 Z(范围) |
[a-d[m-p]] |
等于[a-dm-p](并集) |
[a-z&&[def]] |
d、e 或 f(交集) |
[a-z&&[^bc]] |
等于[ad-z](减去) |
[a-z&&[^m-p]] |
等于[a-lq-z](减去) |
预定义字符类
Pattern |
Description |
. |
任何字符(可能不匹配行结束符) |
\d |
数字:[0-9] |
\D |
非数字:[^0-9] |
\s |
空白字符:[ \t\n\x0B\f\r] |
\S |
非空白字符:[^\s] |
\w |
单词字符:[a-zA-Z_0-9] |
\W |
非单词字符:[^\w] |
边界匹配器
Pattern |
Description |
^ |
行的开头 |
$ |
行的结尾 |
\b |
单词边界 |
\B |
非单词边界 |
\A |
输入的开头 |
\G |
上一个匹配的结尾 |
\Z |
输入的结尾,仅用于最后的结束符(如果有) |
\z |
输入的结尾 |
Greedy 数量词
匹配优先,优先匹配最大长度,匹配尽可能多的内容
Pattern |
Description |
X? |
X,一次或一次也没有 |
X* |
X,零次或多次 |
X+ |
X,一次或多次 |
X{n} |
X,恰好 n 次 |
X{n,} |
X,至少 n 次 |
X{n,m} |
X,至少 n 次,但是不超过 m 次 |
Reluctant 数量词
忽略优先,尽可能匹配最少内容,满足下限即成功
Pattern |
Description |
X?? |
X,一次或一次也没有 |
X*? |
X,零次或多次 |
X+? |
X,一次或多次 |
X{n}? |
X,恰好 n 次 |
X{n,}? |
X,至少 n 次 |
X{n,m}? |
X,至少 n 次,但是不超过 m 次 |
Possessive 数量词
占有优先,优先匹配最大长度,放弃备用状态
Pattern |
Description |
X?+ |
X,一次或一次也没有 |
X*+ |
X,零次或多次 |
X++ |
X,一次或多次 |
X{n}+ |
X,恰好 n 次 |
X{n,}+ |
X,至少 n 次 |
X{n,m}+ |
X,至少 n 次,但是不超过 m 次 |
Logical 运算符
Pattern |
Description |
XY |
X 后跟 Y |
X|Y |
X 或 Y |
(X) |
X,作为捕获组 |
特殊构造(非捕获)
Pattern |
Description |
(?:X) |
X,作为非捕获组 |
(?>X) |
X,固化分组,匹配后放弃备用状态 |
环视结构(非捕获)
环视结构,包括肯定型和否定型,顺序环视和逆序环视,它们只是简单的测试,其中表达式能否在当前的位置匹配后面的内容(顺序),或者前面的内容(逆序),并不改变当前位置。
Pattern |
Description |
(?=X) |
肯定型,先向前(右)匹配与X相符内容 |
(?!X) |
否定型,先向前(右)匹配与X不相符内容 |
(?<=X) |
肯定型,先向后(左)匹配与X相符内容 |
(?<!X) |
否定型,先向后(左)匹配与X不相符内容 |
常见需求
案例
// TODO
| Needs | Pattern |
| -------------------- | ----------------------- |
| 手机号:1XXXXXXXXXX | 1\d{10}
|
| 日期:2020-09-03 | \d{4}-\d{2}-\d{2}
|
| 日期:2020年09月03日 | \d{4}年\d{2}月\d{2}日
|