# Regex

# 参考文档

# Regex 简介

Regex,即 Regular expression。

# 元字符

  • . 除换行符外的任意字符
  • \w 字母、数字、下划线、汉字
  • \s 任意空白符(包括空格、制表符、换行符、中文全角空格等)
  • \d 数字
  • \b 单词的开始或结束
  • ^ 字符串的开始
  • $ 字符串的结束

示例:

  • ^\d{1,3}$ 标识使整个字符串匹配 \d{1,3}

# 重复/限定符

  • * 0 或 多次
  • + 1 或 多次
  • ? 0 或 1 次
  • {n} 重复 n 次
  • {n,} 重复 n 或 多次
  • {n,m} 重复 n 到 m 次

{...} 其实就是指定具体的重复字数,开闭区间。

示例:

  • \b\w{6}\b 6 位单词

# 转义字符

\ 是转义字符。

# 字符类

  • [任意字符集合] 匹配括号中任意一个
  • [^...] 取集合的反值
  • [?!.] 匹配 ? ! .

[] 中的一些值跟外面的含义是不一样的: 比如 ^ 在外面表示开头,? ! . 在外面可能是表示重复,或者需要转义。

# 分支条件

  • |,从左往右测试,短路满足,如果第一个条件满足,就不会再测试第二个了

# 分组/子表达式

  • 使用 () 将表达式包起来,就可以看做为一个 子表达式,然后就可以指定这个整体的重复次数了

示例:

  • 匹配 IP: ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
    • 即理解 ( 2[0-4]\d | 25[0-5] | [01]?\d\d? )

# 反义

大写取反

  • \W 非 字母、数字、下划线、汉字
  • \S 非 任意空白符(包括空格、制表符、换行符、中文全角空格等)
  • \D 非 数字
  • \B 非 单词的开始或结束
  • [^abc] 除 abc 以外的

# 后向引用/捕获

  • (exp),捕获文本到自动命名的组
  • (?<key>exp) 或者 (?'key'exp),捕获文本到名称为 name 的组里
  • (?:exp),不捕获匹配的文本,也不给此分组分配组号

# 零宽断言

使用断言用来查找某些内容(但是又不包括某些内容)之前或者之后的东西,

也就说把它们整体当做 \b^$ 一样的作用,去指定 一个位置

注意: 这里只匹配一个位置。

# 正向

  • (?=exp)它断言 自身出现的位置 后面能匹配表达式,即(? = exp),? 指的是那个位置,然后 ? 后面是 exp。
    • 也称为 零宽度正预测先行断言
  • (?<=exp)它断言 自身出现的位置 前面能匹配表达式
    • 也称为 零宽度正回顾后发断言

# 负向零宽断言

  • (?!exp)它断言 这个位置 后面不能匹配表达式
    • 也称为 零宽度负预测先行断言
  • (?<!exp)它断言 这个位置 前面不能匹配表达式
    • 也称为 零宽度负回顾后发断言

# 贪婪/非贪婪

在数量限定符后面加上 ?,可以在匹配成功的前提下使用最少的重复。

最少的重复?那为什么不直接使用 ? 就可以了?

示例:

例如 aababab

  • 贪婪(默认) a.*b 会匹配整个字符串
  • 非贪婪 a.*?b 这里 * 表示重复 0 次或多次,然后在它后面添加 ?,是重复任意次数的前提下,尽可能少的重复。
    • 这里匹配结果是 aab 和 ab 和 ab,

# 注释

  • (?#comment)

# 讨论区

由于评论过多会影响页面最下方的导航,故将评论区做默认折叠处理。

点击查看评论区内容,渴望您的宝贵建议~
Last Updated: 9/18/2022, 6:01:54 PM