在.NET中提供了对正则表达式的支持,并且提供了相关的类,分别有:Regex、Match、Group、Capture、RegexOptions、MatchCollection、GroupCollection、CaptureCollection。它们之间的关联如下:
对它们描述如下:
Regex:正则表达式类,代表了一个不可变的正则表达式。
Match:代表了Regex类的实例的一次匹配结果,可以通过Regex的Match()实例方法返回一个Match的实例。
MatchCollection:代表了Regex类的实例的所有匹配结果,可以通过Regex的Matches()实例方法返回一个MatchCollection的实例。
Group:表示单个捕获组的结果。由于一次匹配可能包含0个、1个或多个分组,所以Match的实例中返回的是捕获组集合的结果,即GroupCollection。
GroupCollection:表示单个匹配中的多个捕获组的集合,可以通过Match的Groups实例属性返回GroupCollection的实例。
Capture:表示单个捕获中的一个子字符串。同Group一样,由于一个捕获中可能包含0个、1个或多个子字符串,所以Group的实例中返回的是子字符串集合的结果,即CaptureCollection。
CaptureCollection:默认表示按照从里到外、从左到右的顺序由捕获组匹配到的所有子字符串集合,可以通过Group或者Match的Captures实例属性返回CaptureCollection的实例。注意,可以使用RegexOptions.RightToLeft来改变这种匹配顺序。
RegexOptions:提供用于设置正则表达式选项的枚举值。 像上面提到的RightToLeft就是它的一个枚举值之一,除此之外还有None、IgnoreCase、Multiline、ExplicitCapture、Compiled、Singleline、IgnorePatternWhitespace、RightToLeft、ECMAScript及CultureInvariant。RegexOptions枚举值可以相加,比如我们想匹配不区分大小写的字符串“abc”并且还想提高一下执行速度,那么可以写如下代码:
RegexOptions options=RegexOptions.IgnoreCase|RegexOptions.Compiled;
Regex regex=new Regex("abc",options);
从上图可以看出Regex类提供了许多静态方法,很多方法还提供了多种重载方式(在图中对存在多种参数重载的方法都以“...”表示),除此之外我们还会发现Capture、Group及Match之间存在继承关系(说实在话刚开始用的时候我发现它们之间存在着很多相同的字段,这让我当时迷惑不已,希望大家看到这个图后不要再像我当初那样迷惑了)。
在使用C#中的正则表达式进行文本处理之前先花点时间了解一下.NET中有关正则表达式的类和它们之间的关系是有必要的,这篇就算是预热篇了,在开始学习正则表达式之前做做热身运动。虽然在C#中有关正则表达式的类不多,但是对于初学者来说还是容易引起混淆,从而出现不知道该用哪些类的哪些方法或者属性的情况,这篇算是做个初步介绍吧。下一篇就先讲述Regex类,利用Regex可以用来替换、分割和处理字符串。
周公
2010年2月22日