正则表达式学习笔记
Alplune 摸鱼ing

正则表达式学习笔记


什么是正则表达式

正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为”元字符”)。

正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串

通配符: 匹配 0 个或 1 个字符 *匹配零个或多个字符

^ 匹配输入字符串的开始位置 [0-9 ] 匹配一个数字

+ 前面的字符出现 1 次或多次 abc$匹配 abc ,并以 abc 结尾

image-20221015144119178

语法学习

普通字符
  1. [aeiou] :匹配字符串 “google runoob taobao” 中所有的 e o u a 字母
  2. [^aeiou] : 匹配字符串 “google runoob taobao” 中除了 e o u a 字母的所有字母。
  3. [A-Z] :匹配所有大写的字母
  4. . 匹配除换行符(\n、\r)之外的任何单个字符,相等于[^\n\r]。
  5. [\s\S]: 匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。
  6. /w 匹配字母 数字 下划线 等价于 [A-Za-z0-9]

特殊字符

, ., *, /, + 等等


限定符

* 前面子表达式出现零次或多次

+ 匹配前面的子表达式一次或多次

匹配前面的子表达式零次或一次

{n} : 匹配 n 次 例如,o{2} 不能匹配 “Bob” 中的 o,但是能匹配 “food” 中的两个 o。

{n,} :至少匹配 n 次 例如,o{2,} 不能匹配 “Bob” 中的 o,但能匹配 “foooood” 中的所有 o。

{n,m} :匹配 n~m 次


定位符

^ : 匹配字符串输入开始的位置

$ : 匹配字符串输入结束的位置

\b 匹配一个单词边界

匹配单词边界稍有不同,但向正则表达式添加了很重要的能力。单词边界是单词和空格之间的位置。非单词边界是任何其他位置。下面的表达式匹配单词 Chapter 的开头三个字符,因为这三个字符出现在单词边界后面: Chapter

/\bCha/ : 匹配在单词开头的 Cha 字符 /ter\b/:匹配在单词结尾的 ter 字符

\B 非单词边检匹配


选择
image-20221015161227002

用圆括号 () 将所有选择项括起来,相邻的选择项之间用 | 分隔。

() 表示捕获分组,**()** 会把每个分组里的匹配的值保存起来,

img
修饰符

标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。

标记不写在正则表达式里,标记位于表达式之外 如上面的/g

/i : 不区分大小写

g: 查找所有的匹配项

m : 多行匹配

s : 默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。


元字符

建议直接查阅:(正则表达式 – 元字符 | 菜鸟教程 (runoob.com))

列举一些重要的:

\cx 匹配有 x 指明的控制字符,例如, \cM 匹配一个 Control-M 或回车符。

\d 等价于 [0-9]。

\D 等价于 [^0-9]

\w 匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’

\W 匹配字母、数字、下划线。等价于’[^A-Za-z0-9_]’


运算符的优先级

正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。

相同优先级的从左到右进行运算,不同优先级的运算先高后低。

优先级高到低 :

  1. \ :转义符
  2. (),(?:),(?=),[] :圆括号的方括号
  3. *, +, ?, {n}, {n,}, {n,m} 限定符
  4. ^, $, \任何元字符、任何字符
  5. | 替换,“或”操作

实战演练:

用尽可能精确的正则表达式描述南京邮电大学 19 至 22 级的所有本科生的学号

/^(B|Q|P)(19|20|21)(0|1)\d(0|1)\d([0-5][1-9]|[1-5]0)/g