124 lines
4.7 KiB
Markdown
124 lines
4.7 KiB
Markdown
# 正则表达式
|
||
|
||
正则表达式(Regular Expression)用于在文本中匹配、查找和替换特定模式。Legado 源规则中,以 `:`
|
||
开头的规则即为正则表达式,可用于书籍列表和目录列表的提取。
|
||
|
||
[[toc]]
|
||
|
||
## 基本匹配
|
||
|
||
正则表达式是我们用于在文本中检索字母和数字的模式。例如正则表达式 `cat`,表示:字母 `c` 后面跟着一个字母
|
||
`a`,再后面跟着一个字母 `t`。
|
||
|
||
正则表达式通常区分大小写,因此 `Cat` 与字符串 "cat" 不匹配。
|
||
|
||
## 元字符
|
||
|
||
元字符是正则表达式的基本组成元素。
|
||
|
||
| 元字符 | 说明 |
|
||
|:-------:|-----------------------|
|
||
| `.` | 匹配除换行符以外的任意字符 |
|
||
| `[ ]` | 字符类,匹配方括号中包含的任意字符 |
|
||
| `[^ ]` | 否定字符类,匹配方括号中不包含的任意字符 |
|
||
| `*` | 匹配前面的子表达式零次或多次 |
|
||
| `+` | 匹配前面的子表达式一次或多次 |
|
||
| `?` | 匹配前面的子表达式零次或一次 |
|
||
| `{n,m}` | 匹配前面字符至少 n 次,但不超过 m 次 |
|
||
| `(xyz)` | 字符组,按照确切的顺序匹配字符 xyz |
|
||
| `\|` | 分支结构,匹配符号之前的字符或后面的字符 |
|
||
| `\` | 转义符 |
|
||
| `^` | 匹配行的开始 |
|
||
| `$` | 匹配行的结束 |
|
||
|
||
### 英文句号
|
||
|
||
`.` 可以匹配任意单个字符,但不会匹配换行符。例如 `.ar` 匹配 "car"、"par"、"gar"。
|
||
|
||
### 字符集
|
||
|
||
字符集(字符类)使用方括号指定。例如 `[Tt]he` 匹配 "The" 或 "the"。
|
||
|
||
**否定字符集**:`^` 在方括号内出现时会取消字符集。例如 `[^c]ar` 匹配除了 "car" 以外的 "par"、"gar"。
|
||
|
||
### 重复
|
||
|
||
- **星号 `*`**:匹配上一个匹配规则的零次或多次。例如 `[a-z]*` 匹配一行中任意数量的小写字母。
|
||
- **加号 `+`**:匹配上一个字符的一次或多次。例如 `c.+t` 匹配 "cat sat on the mat"。
|
||
- **问号 `?`**:表示前一个字符是可选的。例如 `[T]?he` 同时匹配 "The" 和 "he"。
|
||
|
||
### 花括号(量词)
|
||
|
||
用于指定字符或一组字符可以重复的次数。例如 `[0-9]{2,3}` 匹配至少 2 位但不超过 3 位数字。
|
||
|
||
### 字符组
|
||
|
||
写在圆括号内的子模式 `(...)`。例如 `(ab)*` 匹配零个或多个 "ab"。`(c|g|p)ar` 匹配 "car"、"gar" 或 "par"。
|
||
|
||
### 分支结构
|
||
|
||
`|` 用来定义分支结构。字符集只在字符级别上有作用,而分支结构在表达式级别上依然可以使用。
|
||
|
||
### 转义特殊字符
|
||
|
||
使用 `\` 来转义下一个字符。例如 `(f|c|m)at\.?` 匹配 "fat"、"cat"、"mat" 以及可选的 "." 字符。
|
||
|
||
### 定位符
|
||
|
||
- `^` 检查匹配字符是否是起始字符
|
||
- `$` 检查匹配字符是否是最后一个字符
|
||
|
||
## 简写字符集
|
||
|
||
| 简写 | 说明 |
|
||
|:----:|-----------------------------|
|
||
| `.` | 匹配除换行符以外的任意字符 |
|
||
| `\w` | 匹配所有字母和数字的字符:`[a-zA-Z0-9_]` |
|
||
| `\W` | 匹配非字母和数字的字符:`[^\w]` |
|
||
| `\d` | 匹配数字:`[0-9]` |
|
||
| `\D` | 匹配非数字:`[^\d]` |
|
||
| `\s` | 匹配空格符:`[\t\n\f\r\p{Z}]` |
|
||
| `\S` | 匹配非空格符:`[^\s]` |
|
||
|
||
## 断言
|
||
|
||
| 符号 | 说明 |
|
||
|:-----:|--------|
|
||
| `?=` | 正向先行断言 |
|
||
| `?!` | 负向先行断言 |
|
||
| `?<=` | 正向后行断言 |
|
||
| `?<!` | 负向后行断言 |
|
||
|
||
**正向先行断言**:匹配特定模式之后的内容。例如 `(T|t)he(?=\sfat)` 匹配 "The" 或 "the" 后面跟着 "fat"
|
||
的情况。
|
||
|
||
**负向先行断言**:获取不匹配表达式的内容。例如 `(T|t)he(?!\sfat)` 匹配不在 "fat" 前面的 "The" 或 "
|
||
the"。
|
||
|
||
**正向后行断言**:获取在特定模式之前的匹配内容。例如 `(?<=(T|t)he\s)(fat|mat)` 匹配在 "The" 或 "the"
|
||
之后的 "fat" 和 "mat"。
|
||
|
||
**负向后行断言**:获取不在特定模式之前的匹配内容。
|
||
|
||
## 标记
|
||
|
||
| 标记 | 说明 |
|
||
|:---:|--------|
|
||
| `i` | 不区分大小写 |
|
||
| `g` | 全局搜索 |
|
||
| `m` | 多行匹配 |
|
||
|
||
## 常用正则表达式
|
||
|
||
| 用途 | 正则表达式 |
|
||
|---------|------------------------------|
|
||
| 数字 | `\d+$` |
|
||
| 用户名 | `^[\w\d_.]{4,16}$` |
|
||
| 字母数字字符 | `^[a-zA-Z0-9]*$` |
|
||
| 小写字母 | `[a-z]+$` |
|
||
| 大写字母 | `[A-Z]+$` |
|
||
| HTML 标签 | `<[^>]+?>` |
|
||
| 求更求转发致谢 | `[\((【].*?[求更谢乐发推].*?[】)\)]` |
|
||
| 查找最新章节 | `您可以.*?查找最新章节` |
|
||
| PS/ps | `(?i)ps\b.*` |
|