posts - 10, comments - 24, trackbacks - 0, articles - 0

导航

公告

C# 正则表达式(1) —— Regex 类

Posted on 2009-02-18 11:14 LucasYang 阅读(...) 评论(...) 编辑 收藏

.NET中的正则表达式是处于 System.Text.RegularExpressions 命名空间中的,该命名空间提供了正则表达式的各种强大的功能。

用的较多的类有:GroupGroupCollectionMatchMatchCollectionRegex

Regex 类表示不可变的正则表达式。

Regex 类包含几个 static 方法,这些方法和 Regex 对象方法的功能是一样的。在 .NET Framework 2.0 版中它们有点小区别。在.NET2.0中,将缓存通过调用静态方法而编译的正则表达式,而不会缓存通过调用实例方法而编译的正则表达式。默认情况下,正则表达式引擎将缓存 15 个最近使用的静态正则表达式。因此在经常用到一组固定的正则表达式时,宜采用静态方法。

注意:你可以通过设置静态属性 Regex.CacheSize 来动态改变已编译的正则表达式的当前静态缓存中的最大项数。

 

至于正则表达式的 字符类 ,在此就不作详细介绍。只列出几个常用的。

字符类 说明
[字符分组] 匹配指定字符分组内的任一字符。
[^字符分组] 匹配不在指定字符分组内的任一字符。
[第一个字符-最后一个字符] 匹配字符范围中的任一字符。
\w 与任何单词字符匹配。等效于 [a-zA-Z_0-9]。其中"_"表示字符"_"本身。
\W 与任何非单词字符匹配。等效于 [^a-zA-Z_0-9]。
\s 与任何空白字符匹配。等效于[ \f\n\r\t\v]。注意在"\f"前有一个空格。
\S 与任何非空白字符匹配。等效于[^ \f\n\r\t\v]。
\d 与任何十进制数字匹配。等效于[0-9]。
\D 与任何非数字字符匹配。等效于[^0-9]。

下面先介绍Regex 类的常用方法和属性。

  • 方法
名称 说明
IsMatch 已重载。 指示正则表达式在输入字符串中是否找到匹配项。
Match 已重载。 在输入字符串中搜索正则表达式的匹配项,并将第一个精确结果作为单个 Match 对象返回。
Matches 已重载。 在输入字符串中搜索正则表达式的所有匹配项并返回所有成功的匹配,就像多次调用 Match 一样。
Replace 已重载。 在指定的输入字符串内,使用指定的替换字符串替换与某个正则表达式模式匹配的字符串。
Split 已重载。 在由正则表达式匹配项定义的位置将输入字符串拆分为一个子字符串数组。
  • 属性
名称 说明
CacheSize 获取或设置已编译的正则表达式的当前静态缓存中的最大项数。
Options 返回传入 Regex 构造函数的选项。
RightToLeft 获取一个值,该值指示正则表达式是否从右向左进行搜索。

其中Options是RegexOptions 枚举,它提供用于设置正则表达式选项。

注意此选项并非只能选其一,而是可以通过按位或符号"|"实现多个选项,比如:RegexOptions.Compiled | RegexOptions.IgnoreCase 是要求正则表达式既要编译为程序集,又要忽略大小写。

下面将通过实例来介绍各种方法的使用。

  • Regex.IsMatch 方法——当你只想验证格式是否符合时用此方法
IsMatch Test
  • Regex.Match 方法——适合你想从一段字符串中匹配出一个你想要的子串,并且得到这个子串的相关信息
Match Test

可见,当没有匹配项时Match对象并不会为空,而是匹配到的字符串为空字符串,可以用Length属性或Value属性来判断是否匹配成功。

  • Regex.Matches 方法——有时你并不只是想要匹配到一个符合就满足,而是要把所有满足的子串全部找出来,那么用此方法。此方法返回一个MatchCollection集合,该集合是只读的,并且没有公共构造函数。既然是集合,当然可以用 foreach 进行迭代,集合中存放的是Match对象

待续…