[Regular] 2、正则表达式基础元字符及分组、捕获
分组、捕获、分组不捕获
普通的无特殊意义的括号通常有两种功能:分组和捕获。
捕获型括号的编号是按照括号出现的次序,从左到右计算的。如果提供反向引用,可以在表达式的后面用\1,\2来引用匹配的文本。如:(a)(b)可以用\1引用(a),\2引用(b).
仅用于分组的括号(?:…)
仅用于分组的括号(?:…) 不能用来提取文本,只能用来规定多选结构或者量词的作用对象。如 (1|one)(?:and|or)(2|two) 匹配之后,\1包含“1”或者“one”,\2q包含“2”或者“two”。只用于分组的括号也叫非捕获型括号.
命名捕获 (?<Name>)
.Net引擎能够能捕获内容命名。如果在正则表达式内部引用捕获的文,.Net中使用\k<Name>. 如 (?<Name>a)[a-z]+\k<Name> 来匹配abeena.
固化分组 (?>…)
如
果了解了正则引擎的匹配原理,就很容易理解固化分组。固化分组一旦括号内的子表达式匹配之后,匹配的内容就固定下来,在接下来的匹配过程中不会变化,除非
整个固化分组的括号都被弃用,在外部回溯中重新应用。固化分组能够提高匹配效率,而且自己能对什么能匹配,什么不能匹配进行准确地控制。
匹配优先量词 * + ? {min, max}
匹配优先量词在优先匹配尽量多的字符。
忽略优先量词 *? +? ?? {min, max}?
忽略优先量词与匹配优先量词正好相反,匹配尽可能少的内容。
占有优先量词 *+ ++ ?+ {min, max}+
占有优先量词类似普通的匹配优先量词,不过他们一旦匹配某些内容,就不会“交还”。类似固化分组。
常用元字符
在字符组的内部,元字符的定义规则是不一样的。例号.点号在外部表示任意一下字符,但在字符组内只是表示一个.点号。