重复限定符:
例如:匹配8位数字的QQ号码:^\d{8}$
分组 : 正则表达式中用小括号 () 来做分组,也就是括号中的内容作为一个整体。
如:匹配字符串中包含 0 到多个 ab 开头:^(ab)*
转义 : 要匹配以 (ab) 开头:^(\(ab\))*
条件或 : 正则用符号 | 来表示或,也叫做分支条件,当满足正则里的分支条件的任何一种条件时,都会当成是匹配成功。
区间 :
限定 0 到 9 可以写成 [0-9] 限定 A-Z 写成 [A-Z] 限定某些数字 [165]
零宽断言:
正向先行断言(正前瞻):
语法:(?=pattern)
作用:匹配 pattern 表达式的前面内容,不返回本身。
正向后行断言(正后顾):
语法:(?<=pattern)
作用:匹配 pattern 表达式的后面的内容,不返回本身。
负向先行断言(负前瞻):
语法:(?!pattern)
作用:匹配非 pattern 表达式的前面内容,不返回本身。
负向后行断言(负后顾):
语法:(?<!pattern)
作用:匹配非 pattern 表达式的后面内容,不返回本身。
捕获和非捕获
捕获组:匹配子表达式的内容,把匹配结果保存到内存中中数字编号或显示命名的组里,以深度优先进行编号,之后可以通过序号或名称来使用这些匹配结果。
数字编号捕获组:
语法:(exp)
解释:从表达式左侧开始,每出现一个左括号和它对应的右括号之间的内容为一个分组,在分组中,第 0 组为整个表达式,第一组开始为分组。
命名编号捕获组:
语法:(?<name>exp)
解释:分组的命名由表达式中的 name 指定
非捕获组:
语法:(?:exp)
解释:和捕获组刚好相反,它用来标识那些不需要捕获的分组,说的通俗一点,就是你可以根据需要去保存你的分组。
反向引用
根据捕获组的命名规则,反向引用可分为:
-
数字编号组反向引用:\k 或\number
-
命名编号组反向引用:\k 或者\'name'.
贪婪和非贪婪
贪婪:
贪婪匹配:当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符,这匹配方式叫做贪婪匹配。
特性:一次性读入整个字符串进行匹配,每当不匹配就舍弃最右边一个字符,继续匹配,依次匹配和舍弃(这种匹配 - 舍弃的方式也叫做回溯),直到匹配成功或者把整个字符串舍弃完为止,因此它是一种最大化的数据返回,能多不会少。
懒惰(非贪婪):
懒惰匹配:当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能少的字符,这匹配方式叫做懒惰匹配。
特性:从左到右,从字符串的最左边开始匹配,每次试图不读入字符匹配,匹配成功,则完成匹配,否则读入一个字符再匹配,依此循环(读入字符、匹配)直到匹配成功或者把字符串的字符匹配完为止。
反义: