一、元字符(特殊符号,匹配特殊含义)
1. 匹配位置(不占字符,只定位)
| 简写 |
等价 |
含义 |
\d |
[0-9] |
数字 |
\D |
[^0-9] |
非数字 |
\w |
[a-zA-Z0-9_] |
字母、数字、下划线 |
\W |
[^a-zA-Z0-9_] |
非单词字符 |
\s |
[ \t\n\r] |
空白(空格、制表、换行) |
\S |
[^ \t\n\r] |
非空白字符 |
2. 匹配任意 / 限定字符
| 符号 |
作用 |
. |
匹配任意单个字符(不含换行) |
[] |
字符集,匹配括号内任意一个 |
[^] |
取反字符集,匹配不在括号内的字符 |
\| |
或,分隔多个匹配规则 |
() |
分组,捕获内容;也可整体限定重复 |
3. 重复量词(修饰前面 1 个 / 一组字符出现次数)
| 符号 |
含义 |
* |
0 次、1 次、多次(\ge 0) |
+ |
至少 1 次(\ge 1) |
? |
0 次或 1 次(0/1);紧跟量词后 = 非贪婪 |
{n} |
固定 n 次 |
{n,} |
至少 n 次 |
{n,m} |
$n \sim m$ 次(包含两端) |
4. 转义符号 \
把元字符变回普通字符:\. 匹配点、\* 匹配星号、\( 匹配括号。
预定义简写字符类(常用)
| 简写 |
等价 |
含义 |
\d |
[0-9] |
数字 |
\D |
[^0-9] |
非数字 |
\w |
[a-zA-Z0-9_] |
字母、数字、下划线 |
\W |
[^a-zA-Z0-9_] |
非单词字符 |
\s |
[ \t\n\r] |
空白(空格、制表、换行) |
\S |
[^ \t\n\r] |
非空白字符 |
二、字符集 []
- 范围简写:
[0-9]、[a-z]、[A-Za-z0-9]
- 括号内多数元字符失效:
[.*+?] 在中括号内直接匹配符号本身,不需要加转义。
- 脱字符位置:脱字符放最前才是取反
[^a-z];如果放中间(如 [a^z])只是普通符号。
三、分组与捕获
(内容):捕获分组,匹配后可提取分组内容、反向引用。
- 反向引用:
\1 代表第 1 个括号匹配到的文本。
(?:内容):非捕获分组,只分组不保存,节省运行性能。
四、贪婪 vs 非贪婪
- 默认贪婪:尽可能匹配最长的文本。例如
a.*b 匹配 a1b2b 的全部结果。
- 非贪婪(加
?):最短匹配。例如 a.*?b 只匹配 a1b。
五、常用修饰符(写在正则外侧)
g:全局匹配,找到全部结果(不停止在第一个)。
i:忽略大小写。
m:多行模式,使 ^ 和 $ 能够匹配每行的首尾。
s:单行模式,使点号 . 可以匹配换行符。
六、最简示例(方便理解)
- 手机号简单匹配:
^1[3-9]\d{9}$
- 邮箱简易匹配:
^\w+@\w+\.\w+$
- 纯数字验证:
^\d+$
- 匹配小数:
^\d+(\.\d+)?$
七、避坑要点
. 默认不匹配换行,需要匹配换行时记得开启 s 修饰符。
? 有两个作用:作为量词时代表“0次或1次”,紧跟其他量词后时代表“非贪婪”,注意区分场景。
- 路径斜杠、小数点、括号、星号在作为普通字符匹配时,必须用
\ 进行转义。
^ 和 $ 如果不加,会匹配到“包含该规则”的模糊字符串;加上才是从头到尾的“精确匹配”。
- 继续加油吧!
评论(0)
暂无评论