/ NOTES

正则表达式

正则表达式

最近学了一点正则表达式

先来看一段正则表达式 (?P<Year>\d{4})-(?P<Month>\d{2})-(?P<Day>\d{2})

它能匹配年月日,像这种 “2021-08-21”, “2021-09-02”

但无法匹配 “2021,08,21”, “2021-8-21” 等,必须带有前导 0

但是怎么做到的呢,没错!通过 <> 里的英文单词来匹配 先分开来看

首先,年份肯定是数字,所以要匹配数字,然后吧

  • \d 匹配数字

  • \w 匹配下划线和任何一个数字字母
  • . 匹配除了换行符外的任何字符
  • \s 匹配任何空白字符,包括空格、换行符、回车符、制表符、换页符、垂直制表符
  • \S\s 相反,匹配任何非空白字符
  • \n , \r , \t , \f , \v 就分别表示换行符回车符制表符换页符垂直制表符
  • 空格的话用反斜杠加空格表示,即 ‘\ ‘

所以刚刚那一大串里的 \d 才是真正匹配数字的,而后面的花括号则是限定符,用来指定匹配的次数

(以下的 3 个 n 均为非负整数

  • {n} 表示要匹配刚好 n 次,\d{4} 就表示要正好匹配 4 个数字
  • {n,} 表示至少要匹配 n 次
  • {n, m} 表示 (n ≤ 匹配次数 ≤ m)
  • * 表示 (匹配次数 ≥ 0)
  • + 表示 (匹配次数 ≥ 1)
  • ? 表示 (0 ≤ 匹配次数 ≤ 1)

-没有特殊含义的,所以如果要匹配年月日的话,正则表达式就应该这么写\d{4}-\d{2}-\d{2}

小括号括起来的内容是子表达式

  • () 标记一个子表达式的开始和结束位置,子表达式可以获取供以后使用
  • ^ 匹配输入字符串的开始位置。但当其在中括号中使用时,表示不接受该方括号表达式中的字符集合。
  • $ 匹配输入字符串的结尾位置

而原本的年月日中的括号是命名编号捕获组,使用方法如下

  • (?P<名字>表达式) 后续可用”名字”获取子表达式匹配到的内容

中括号括起来的内容表示一个集合

  • [A-Z] 匹配所有大写字母
  • [a-f0-9] 匹配十六进制数字
  • [ABC] 匹配 A, B, C 三者