正则表达式(Regular Expression,简称 Regex)是用于处理字符串的强大工具。无论是数据验证、搜索替换还是文本解析,掌握 Regex 都能让你事半功倍。以下是一份常用的 Regex 语法速查表。
1. 基础字符与元字符
| 符号 | 说明 | 示例 | 匹配结果 |
|---|
. | 匹配除换行符以外的任意单个字符 | a.c | ”abc”, “a@c” |
\ | 转义字符,用于匹配保留字符 | \. | ”.” |
| ` | ` | 逻辑或 (OR) | `cat |
2. 字符类 (Character Classes)
| 符号 | 说明 |
|---|
[abc] | 匹配方括号内的任意一个字符 (a 或 b 或 c) |
[^abc] | 匹配除了方括号内字符以外的任意字符 |
[a-z] | 匹配任意小写字母 |
[A-Z] | 匹配任意大写字母 |
[0-9] | 匹配任意数字 |
\w | 匹配任意单词字符 (字母、数字、下划线),等价于 [a-zA-Z0-9_] |
\W | 匹配任意非单词字符 |
\d | 匹配任意数字,等价于 [0-9] |
\D | 匹配任意非数字 |
\s | 匹配任意空白字符 (空格、制表符、换行符) |
\S | 匹配任意非空白字符 |
3. 量词 (Quantifiers)
用来指定前面的字符出现的次数。
| 符号 | 说明 | 示例 |
|---|
* | 匹配 0 次或多次 | a* (匹配 "", “a”, “aa”) |
+ | 匹配 1 次或多次 | a+ (匹配 “a”, “aa”) |
? | 匹配 0 次或 1 次 (可选) | colou?r (匹配 “color”, “colour”) |
{n} | 匹配恰好 n 次 | \d{3} (匹配 “123”) |
{n,} | 匹配至少 n 次 | \d{2,} (匹配 “12”, “123”) |
{n,m} | 匹配 n 到 m 次 | \d{2,4} (匹配 “12”, “123”, “1234”) |
注意:默认情况下量词是贪婪的(尽可能多匹配)。在量词后加 ? 可变为懒惰模式(尽可能少匹配),如 .*?。
4. 边界与定位 (Anchors)
| 符号 | 说明 |
|---|
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
\b | 匹配单词边界 (Word Boundary) |
\B | 匹配非单词边界 |
5. 分组与引用 (Groups & References)
| 符号 | 说明 | 示例 |
|---|
(...) | 捕获组 (Capturing Group) | (abc) |
(?:...) | 非捕获组 (Non-capturing Group) | (?:abc) |
\1 | 引用第一个捕获组匹配的内容 | (a)\1 (匹配 “aa”) |
(?<name>...) | 命名捕获组 | (?<year>\d{4}) |
6. 断言 (Lookaround)
用于根据周围环境匹配字符,但不消耗字符(即不包含在匹配结果中)。
| 符号 | 说明 | 示例 |
|---|
(?=...) | 正向先行断言 (存在) | a(?=b) (匹配后面紧跟 b 的 a) |
(?!...) | 负向先行断言 (不存在) | a(?!b) (匹配后面不紧跟 b 的 a) |
(?<=...) | 正向后行断言 (存在) | (?<=b)a (匹配前面紧跟 b 的 a) |
(?<!...) | 负向后行断言 (不存在) | (?<!b)a (匹配前面不紧跟 b 的 a) |
7. 常用标志 (Flags)
在 JS 等语言中,正则通常写作 /pattern/flags。
| 标志 | 说明 |
|---|
g | 全局匹配 (Global) |
i | 忽略大小写 (Case Insensitive) |
m | 多行模式 (Multiline),^ 和 $ 匹配每一行的开头结尾 |
s | 点号通配模式 (Dotall),. 可以匹配换行符 |
8. 常用实例 (Common Patterns)
邮箱验证
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
手机号 (简单版)
^1[3-9]\d{9}$
URL 匹配
https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)
日期 (YYYY-MM-DD)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$
匹配中文字符
[\u4e00-\u9fa5]
身份证 (中国大陆)
^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$
^(?:\d{15}|\d{18}|\d{17}[\dXx])$
IPv4 地址
^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$
强密码
规则:至少8位,包含大小写字母和数字,可选特殊字符。
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{8,}$