# 正则表达式 正则表达式(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]` | ## 断言 | 符号 | 说明 | |:-----:|--------| | `?=` | 正向先行断言 | | `?!` | 负向先行断言 | | `?<=` | 正向后行断言 | | `?]+?>` | | 求更求转发致谢 | `[\((【].*?[求更谢乐发推].*?[】)\)]` | | 查找最新章节 | `您可以.*?查找最新章节` | | PS/ps | `(?i)ps\b.*` |