基础

限定符

?

字符可有可无,出现0次或1

*

字符可出现0个或

+

字符出现1次以上

{…}

限定字符出现次数左右闭合区间{n,}表示出现n次以上

(expression)

将单个字符括起组成一字符串,则限定符修饰括号内字符串

(?:expression)

非 捕获分组 匹配括号里的整个字符串但不获取匹配结果,拿不到分组引用

\num

对前面所匹配分组的引用

|

允许一个表达式包含多个不同的分支,分支在表达式层面上运作

字符类

[]

匹配中括号内出现的任意1个字符,中括号外可加限定符 [^],内加^表示括号内字符均不匹配 [a-z] - 小写a到z [A-Z] - 大写a到z [0-9] - 数字0到9

元字符

  • \d - 数字字符[0-9]
  • \w - 单词字符 英文字符,数字,下划线
  • \s - 空白符,tab字符,换行符
  • \D - 非\d字符
  • \W - 非\w字符
  • \S- 非\s字符
  • . - 任意字符,但不包含换行符
  • ^ - 匹配行首
  • $ - 匹配行尾

    高级概念

    贪婪与懒惰匹配

    *、+、{}默认尽可能匹配更多字符(贪婪匹配) 其后加?则可以切换为懒惰匹配(只匹配符合选项的最少字符)

零宽断言

?=正向先行断言

x(?=y) - 后面是yx

?!负向先行断言

x(?!y) - 后面没有yx

?<=正向后行断言

(?<=y)x - 前面是yx

?<!负向后行断言

(?<!y)x - 前面没有yx

标志

//g - 全局匹配

//m - 多行匹配

正则表达式将所有文本视作一行 使用了多行标志,它就会单独处理每一行

//i - 不区分大小写英文字母