分类记忆法:(来自极客时间 每日一课 https://time.geekbang.org/dailylesson/detail/100044029

我们把元字符分成如下这几类

  • 基础
  • 空白符
  • 范围
  • 边界
  • 量词

基础

  • . 任意字符(换行除外)
  • \d 任意数字 \D 任意非数字
  • \w 任意数字字母下划线 \W 数字、字母、下划线以外的任意字符
  • \s 任意空白符 \S 任意非空白符

空白符

  • \r 回车符
  • \n 换行符
  • \f 换页符
  • \t 制表符
  • \v 垂直制表符

量词

  • * 含义:0 到多次
  • + 含义:1 到多次
  • ? 含义:0 到 1次
  • {m} 含义:出现 m 次
  • {m,n} 含义:m 到 n次
  • {,n} 其中 m 不写代表 0,至多 n次
  • {m,} 其中 n 不写代表无穷大,至少 m 次

范围

  • | 或,如 ab|bc 代表 ab 或 bc
  • [...] 多选一,括号中任意单个元素
  • [a-z] 匹配 a 到 z 之间任意单个元素(按 ASCII 表,包含 a,z)
  • [^...] 取反,不能是括号中的任意单个元素

举例验证手机号

1[3456789]\d{9}
1[3-9]\d{9}
1[^012]\d{9}

边界

  • ^ 匹配行的开始,多行模式是,可以匹配任意行开头
  • $ 匹配行的结束,多行模式时,可以匹配任意行结尾
  • \b 匹配单词边界
  • \A 仅匹配整个字符串的开始,不支持多行模式
  • \Z 仅匹配整个字符的结束,不支持多行模式

贪婪&非贪婪

  • 贪婪:表示次数的量词,默认是贪婪的,默认尽可能多地去匹配
  • 非贪婪:“数量” 元字符后加 ? (英文问号) 找出长度最小且满足要求的

环视

  • X(?<=Y) 匹配前面是 Y 的 X
  • X(?<!Y) 匹配前面不是 Y 的 X
  • X(?=X) 匹配后面是 Y 的 X
  • X(?!Y) 匹配后面不是 Y 的 X

子组

  • (正则) 将 regex 保存成一个子组
  • (?p<name>正则) 命名子组,将 regex 保存成名称为 name 的子组
  • (?:正则) 仅分组,不保存这个子组
  • \分组编号 重复每个子组

练习正则 网站

https://regex101.com/

关于极客返利

极客返利 是由我个人开发的一款网课返利、返现平台。包含 极客时间返现、拉勾教育返现、掘金小册返现、GitChat返现。目前仅包含这几个平台。后续如果有需要可以考虑其他平台。 简而言之就是:你买课,我返现。让你花更少的钱,就可以买到课程。

https://geek.laravelcode.cn

https://geek.idaka.ink

版权许可

本作品采用 知识共享署名 4.0 国际许可协议 进行许可。

转载无需与我联系,但须注明出处,注明文章来源 如何快速记忆正则表达式

联系我

编程怪事
暂无回复
0 / 180