正则笔记

正则笔记

六月 01, 2019

正则组成元素:字符和元字符

单字符

特殊字符 正则表达式 记忆方式
换行符 \n new line
换页符 \f form feed
回车符 \r return
空白符 \s space
制表符 \t tab
垂直制表符 \v vertical tab
回退符 [\b] backspace,之所以使用[]符号是避免和\b重复

多字符

匹配区间 正则表达式 记忆方式
除了换行符之外的任何字符 . 句号,除了句子结束符
单个数字, [0-9] \d digit
除了[0-9] \D not digit
包括下划线在内的单个字符,[A-Za-z0-9_] \w word
非单字字符 \W not word
匹配空白字符,包括空格、制表符、换页符和换行符 \s space
匹配非空白字符 \S not space

循环与重复

  1. ? 表示 0 | 1

  2. * 表示 >= 0

  3. + 表示 >= 1

特定次数

  • {x}: x次

  • {min, max}: 介于min次到max次之间

  • {min, }: 至少min次

  • {0, max}: 至多max次

匹配规则 元字符 联想方式
0次或1次 ? 且问,此事有还无
0次或无数次 * 宇宙洪荒,辰宿列张:宇宙伊始,从无到有,最后星宿布满星空
1次或无数次 + 一加, +1
特定次数 {x}, {min, max} 可以想象成一个数轴,从一个点,到一个射线再到线段。min和max分别表示了左闭右闭区间的左界和右界

位置边界

边界和标志 正则表达式 记忆方式
单词边界 \b boundary
非单词边界 \B not boundary
字符串开头 ^ 小头尖尖那么大个
字符串结尾 $ 终结者,美国科幻电影,美元符$
多行模式 m标志 multiple of lines
忽略大小写 i标志 ignore case, case-insensitive
全局模式 g标志 global

子表达式:分组、回溯引用和逻辑处理

  • 分组:()

  • 回溯引用(backreference)指的是模式的后面部分引用前面已经匹配到的子字符串。

  • 向前查找:(?=regex)

    1
    "happy happily".replace(/happ(?=ily)/, '-') == "happy -ily"
  • 负前向查找:(?!regex)

    1
    "happy happily".replace(/happ(?!ily)/, '-') == "-y happily"
  • 后向查找:(?<=regex) !不是每种正则实现都支持后向查找。

  • 负后向查找:(?<!regex)

回溯查找 正则 记忆方式
引用 \0,\1,\2 和 $0, $1, $2 转义+数字
非捕获组 (?:) 引用表达式(()), 本身不被消费(?),引用(:)
前向查找 (?=) 引用子表达式(()),本身不被消费(?), 正向的查找(=)
前向负查找 (?!) 引用子表达式(()),本身不被消费(?), 负向的查找(!)
后向查找 (?<=) 引用子表达式(()),本身不被消费(?), 后向的(<,开口往后),正的查找(=)
后向负查找 (?<!) 引用子表达式(()),本身不被消费(?), 后向的(<,开口往后),负的查找(!)

逻辑处理

逻辑关 正则元字符
[^regex]和!
|