跳转至

正则表达式

文参考档

1 量词

字符 匹配规则 等价
. 匹配任一个字符
? 匹配0-1次 {0-1}
* 匹配0次以上 {0,}
+ 匹配1次以上 {1,}
{n} 匹配n次
{n,} 匹配至少n次
{n,m} 匹配n-m次

2 ^和$首尾控制符,[^] 否定

  • ^ 指定开头
  • $ 指定结尾
  • [^][]相反,表示除了在[]内的都可以

3 集合和范围

[]包裹的字符集,表示可以匹配其中任意字符

- `a[bcd]e`:表示可以匹配abe、ace、ade
- `a[b-d]e`:和上面一致
- `a[bcd]{2}e`:匹配以a开头、e结尾,中间由bcd其中2个字符组合,字符可以相同,如匹配abbe、adce

4 () 组

由 () 包裹的字符是一个整体,如 (abc)12, 会匹配 abc12, 而不会匹配 bc12

组还能细分为捕获组和非捕获组,语法区别就是非捕获组需要在组左括号后加上`?:`,功能上的不同是捕获组可以使用\1,\2,...,\n来使用捕获组捕获的内容,而非捕获组不能
- 捕获组:`(字符)`
- 非捕获组:`(?:字符)`
title: 组可以结合量词一起使用
- `abcd(efg)`,只会匹配abcdefg
- `abcd(efg)?`,会匹配abcd或者abcdefg
- `<(h1)>[a-z]*</\1>`,会匹配`<h1>title</h1>`
title: 捕获组的使用
- `abcd(efg)\1`,会匹配abcdefgefg,`\1`表示第一个捕获组,也就是efg
- `(red)=(green)=\2\1`,匹配red=green=greenred

5 |或

| 就是或者的意思,如 (a|b)12, 即可以匹配 a12, 也可以匹配 b12

6 转义序列

简写 描述 等价
. 除换行符外的所有字符 [^\n]
\w 匹配所有字母数字 [a-zA-Z0-9_]
\W 匹配所有非字母数字,即符号 [^\w]
\d 匹配数字 [0-9]
\D 匹配非数字 [^\d]
\s 匹配所有空格字符 [\t\n\f\r\p{Z}]
\S 匹配所有非空格字符 [^\s]
\f 匹配一个换页符 [form feed]
\n 匹配一个换行符 [newline]
\r 匹配一个回车符 [return]
\t 匹配一个制表符 [tab]
\v 匹配一个垂直制表符
\p 匹配 CR/LF, 用来匹配 DOS 行终止符 \r\n

7 模式修正符 i、g、m

  • i忽略大小写
  • g全局搜索,匹配所有满足的字符
  • m多行匹配,用于匹配行首行尾时,每一行都可以去匹配

8 案例

8.1 匹配注释

  1. ^\s*//[\s\S]*?\n :删除独占单行的注释 (//注释)

8.2 匹配空行

  1. ^\s*(?=\r?$)\n

9 参考资料

  • https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md
  • https://perldoc.perl.org/perlre#Regular-Expressions