lab/note/随手记/正则表达式.md
张育新 241a7c43da docs(note): 新增 excel/正则/Nginx 笔记并整理目录
- 新增 AGENTS.md 仓库说明与 excelize 依赖
- 新增正则表达式、go操作excel、Nginx常见错误、Golang底层架构笔记
- 布尔变量命名迁移至资源/编程/规范,删除随手记旧笔记
2026-08-05 18:32:17 +08:00

73 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 正则表达式
正则表达式是一种用于匹配和操作文本的强大工具,用于描述要匹配的文本模式。
## 匹配字符
### 普通匹配字符
| 字符 | 描述 |
| :------- | :----------------------------------------------------------- |
| `[xyz]` | 匹配 `[xyz]` 中列出的所有字符。例如 `[xyz]`,能够匹配目标的所有 x、y、z 字符。 |
| `[^xyz]` | 匹配 `[^xyz]` 中列出的字符外的所有字符。例如 `[^xyz]`,能够匹配目标的除去 x、y、z 外的所有字符。 |
| `[A-Z]` | `[A-Z]` 表示一个区间,匹配所有大写字母;`[a-z]` 匹配所有小写字母;`[0-9]` 匹配所有数字。 |
| `[\s\S]` | 匹配所有字符(包括换行符)。`\s` 匹配所有空白符(包括换行),`\S` 匹配所有非空白符(不包括换行),两者合并即可匹配任意字符。 |
| `.` | 匹配除换行符 `\n`、`\r` 之外的任何单个字符,等价于 `[^\n\r]`。 |
| `\w` | 匹配字母、数字、下划线,等价于 `[A-Za-z0-9_]`。 |
| `\d` | 匹配任意一个阿拉伯数字0 到 9等价于 `[0-9]`。 |
### 非打印字符
| 字符 | 描述 |
| :---- | :----------------------------------------------------------- |
| `\cx` | 匹配由 x 指明的控制字符。例如,`\cM` 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一,否则将 c 视为一个原义的 'c' 字符。 |
| `\f` | 匹配一个换页符,等价于 `\x0c``\cL`。 |
| `\n` | 匹配一个换行符,等价于 `\x0a``\cJ`。 |
| `\r` | 匹配一个回车符,等价于 `\x0d``\cM`。 |
| `\s` | 匹配任何空白字符,包括空格、制表符、换页符等,等价于 `[ \f\n\r\t\v]`。注意 Unicode 正则表达式会匹配全角空格符。 |
| `\S` | 匹配任何非空白字符,等价于 `[^ \f\n\r\t\v]`。 |
| `\t` | 匹配一个制表符,等价于 `\x09``\cI`。 |
| `\v` | 匹配一个垂直制表符,等价于 `\x0b``\cK`。 |
### 特殊字符
| 特殊字符 | 描述 |
| :------- | :----------------------------------------------------------- |
| `$` | 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 `$` 也匹配 `\n``\r`。要匹配 `$` 字符本身,请使用 `\$`。 |
| `( )` | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 `\(``\)`。 |
| `*` | 匹配前面的子表达式零次或多次。要匹配 `*` 字符本身,请使用 `\*`。 |
| `+` | 匹配前面的子表达式一次或多次。要匹配 `+` 字符本身,请使用 `\+`。 |
| `.` | 匹配除换行符 `\n` 之外的任何单字符。要匹配 `.` 本身,请使用 `\.`。 |
| `[` | 标记一个中括号表达式的开始。要匹配 `[`,请使用 `\[`。 |
| `?` | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 `?` 字符本身,请使用 `\?`。 |
| `\` | 将下一个字符标记为特殊字符、原义字符、向后引用或八进制转义符。例如,`\\` 匹配 `\`。 |
| `^` | 匹配输入字符串的开始位置。在方括号表达式中使用时,表示不接受方括号内的字符集合(取反)。要匹配 `^` 字符本身,请使用 `\^`。 |
| `{` | 标记限定符表达式的开始。要匹配 `{`,请使用 `\{`。 |
| `|` | 指明两项之间的一个选择。要匹配 `|`,请使用 `\|`。 |
### 限定符
| 字符 | 描述 |
| :------ | :----------------------------------------------------------- |
| `*` | 匹配前面的子表达式零次或多次。 |
| `+` | 匹配前面的子表达式一次或多次。 |
| `?` | 匹配前面的子表达式零次或一次,等价于 `{0,1}`。例如,`do(es)?` 可以匹配 "do" 和 "does",但不能匹配 "dog"。 |
| `{n}` | n 是一个非负整数,匹配确定的 n 次。例如,`o{2}` 不能匹配 "Bob" 中的 o但是能匹配 "food" 中的两个 o。 |
| `{n,}` | n 是一个非负整数,至少匹配 n 次。例如,`o{2,}` 不能匹配 "Bob" 中的 o但能匹配 "foooood" 中的所有 o。`o{1,}` 等价于 `o+``o{0,}` 等价于 `o*`。 |
| `{n,m}` | m 和 n 均为非负整数,其中 n <= m。最少匹配 n 次且最多匹配 m 次。例如,`o{1,3}` 将匹配 "fooooood" 中的前三个 o。`o{0,1}` 等价于 `o?`。 |
## 常用正则表达式
| 正则表达式 | 匹配内容 |
| -------------------------- | ---------- |
| `[\u4e00-\u9fa5]` | 中文字符 |
| `\d{3}-\d{8}|\d{4}-\{7,8}` | 国内手机号 |
| | |
| | |
| | |
| | |
| | |
| | |
| | |