[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}+
占有优先量词类似普通的匹配优先量词,不过他们一旦匹配某些内容,就不会“交还”。类似固化分组。

常用元字符

在字符组的内部,元字符的定义规则是不一样的。例号.点号在外部表示任意一下字符,但在字符组内只是表示一个.点号。


posted @ 2009-06-01 17:15  ABeen  阅读(977)  评论(0编辑  收藏  举报