正则表达式概念小结

正则表示中的特殊字符有不同的含义,一共分 6 种。分别是:

  • 字符类别
  • 字符集合
  • 边界
  • 分组和反向引用
  • 数量词
  • 断言

字符类别(Chraracter Classes)

常见的有

  • . 表示匹配任意字符
  • \d 表示匹配任意阿拉伯数字
  • \w 表示匹配任意字符(还包括下划线)
  • \s 表示匹配一个空白符号

特殊字符的大写形式则表达了小写形式的反义,不在赘述

字符集合(Chraracter Sets)

  • [xyz] 表示匹配一个字符的集合,也叫字符组。别看它很长,其实它只匹配一个字符。可以使用 - 来指定一个范围
  • [^xyz] 是上一个匹配方式的反义形式,叫做反义字符组。即匹配任意不包括在括号内的字符

边界(Boundaries)

  • ^ 匹配开始
  • $ 匹配结尾

分组和反向引用(grouping & back references)

  • (X) 匹配 x 并且捕获匹配项,被称之为捕获型分组
  • (?:X) 非捕获型分组,仅做简单的匹配,并不会捕获所匹配的文本。有微弱的性能优势。非捕获型分组并不会干扰捕获型分组的编号。如果 (?:X)? 带有后缀 ? 则表示这个分组是可选的
  • \n n 是一个正整数,一个反向引用,指向正则表达式中第 n 个括号中匹配的子字符串

数量词(Quantifiers)

  • X* 匹配前面的模式次数大于等于 0
  • X+ 匹配前面的模式次数必须大于等于 1。结合后面的总结,我们发现它其实等同于 {1,}
  • X*? 同 X*,但是会匹配最小可能匹配。比如 /".*?"/ 匹配 '"foo" "bar"' 中的 '"foo"',而 * 后面没有 ? 时匹配 '"foo" "bar"'
  • X? 匹配前面的模式 X 0 或 1 次。如果在数量词 *、+、? 或 {}, 任意一个后面紧跟该符号(?),会使数量词变为非贪婪( non-greedy) ,即匹配次数最小化。反之,默认情况下,是贪婪的(greedy),即匹配次数最大化
  • x|y 匹配 x 或 y
  • x{n} 前面的模式 x 连续出现 n 次时匹配。{n,} 和 {n, m} 则表示次数的区间

断言(Assertions)

  • x(?=y) 条件限定,只有当 x 后面紧跟着 y 时,才匹配 x
  • x(?!y) 条件限定,只有当 x 后面不是紧跟着 y 时,才匹配 x

常见正则表达式收集


// 验证邮箱
([a-z_A-Z0-9]+@[a-z_A-Z0-9]+\.(com|org|net))

// 验证网址
(?:https?:\/\/)?(?:[a-zA-Z0-9])+\.(?:com|net|org)

// 验证网址
^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$ 

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容