C#正则表达式

jopen 10年前

1. 使用到的类

    C#中使用正则表达式需要如下几个类(类所在的命名空间为:System.Text.RegularExpressions):
        * Regex 编译后的表达式的实例
        * RegexOptions 提供用于设置正则表达式的枚举值
        * RegexCompilationInfo:提供编译器用于将正则表达式编译为独立程序集的信息
        * Capture: 包含一次匹配的结果; 
        * CaptureCollection: Capture的序列; 
        * Group: 一次组记录的结果,由Capture继承而来; 
        * GroupCollection:表示捕获组的集合
        * Match: 一次表达式的匹配结果,由Group继承而来; 
        * MatchCollection: Match的一个序列; 
        * MatchEvaluator: 执行替换操作时使用的委托;

2. 类方法介绍

    Regex类中还包含一些静态的方法: 
        Escape:       对字符串中的regex中的转义符进行转义; 
        IsMatch:     如果表达式在字符串中匹配,该方法返回一个布尔值; 
        Match:       返回Match的实例; 
        Matches:    返回一系列的Match的方法; 
        Replace:      用替换字符串替换匹配的表达式; 
        Split:          返回一系列由表达式决定的字符串; 
        Unescape:   不对字符串中的转义字符转义。

3. 如何用?

    3.1 新建一个Regex实例对象

/**    * 使用两个参数的构造   * RegexOptions属于枚举类型,包括IgnoreCase(忽略大小写)、ReghtToLeft(从右向左)、None(默认)、CultureInvariant(忽略区域)、Multline(多行模式)和SingleLine(单行模式))   *   */  Regex regex = new Regex(@"[+-]{1}\d{1,}[.]*[0-9]*", RegexOptions.None);    // 或者  Regex regex = new Regex(@"[+-]{1}\d{1,}[.]*[0-9]*");



    3.2 获取匹配结果,调用Regex对象的match方法

    

/**   * 获取匹配结果对象   * 匹配结果Match类对象的属性:   *   Success:匹配是否成功   *   Value: 如果匹配成功,那么可以取得匹配的子字符串   * 方法:   *   NextMatch: 从上一个匹配结果的位置开始,返回包含下一匹配结果的新Match对象   */  Match match = regex.Match(text);


    3.3 获取匹配结果子字符串

while(match.Success)  {   Console.WriteLine(match.Value);   match = match.NextMatch();  }



完整例子代码:
string text = @"Flow -0880.809 m3/h";  Regex regex = new Regex(@"[+-]{1}\d{1,}[.]*[0-9]*", RegexOptions.None);  Console.WriteLine("regex match count:" + regex.Matches(text).Count);  Match match = regex.Match(text);  if (match.Success)  {          Console.WriteLine(match.Value);          match = match.NextMatch();  }


    3.4 常用的正则表达式

    IP地址匹配:
        简单的匹配: (\d{1,3}\.){3}\d{1,3}
        正确的匹配: ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

4. 参考博客 

     http://blog.csdn.net/begtostudy/article/details/3081083
     http://www.cnblogs.com/Fskjb/archive/2010/01/22/1654439.html
     http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html
     http://zhoufoxcn.blog.51cto.com/792419/283021