基础
限定符
?
字符可有可无,出现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) - 后面是y的x
?!负向先行断言
x(?!y) - 后面没有y的x
?<=正向后行断言
(?<=y)x - 前面是y的x
?<!负向后行断言
(?<!y)x - 前面没有y的x
标志
//g - 全局匹配
//m - 多行匹配
正则表达式将所有文本视作一行 使用了多行标志,它就会单独处理每一行
