正则表达式
正则表达式(Regular Expression)用于在文本中匹配、查找和替换特定模式。Legado 源规则中,以 : 开头的规则即为正则表达式,可用于书籍列表和目录列表的提取。
基本匹配
正则表达式是我们用于在文本中检索字母和数字的模式。例如正则表达式 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.* |
