正则表达式是我喜欢的东西,正则表达式在字符串处理方面,除了性能问题外,它有着无可比拟的优势。C#中引入了正则表达式的类库,给我们带来了很大的方便。
      要在C#中使用正则表达式,需要引用如下的名字空间:

      using System.Text;
      using System.Text.RegularExpressions;

      在C#中使用正则表达式,最重要的类是Regex。Regex对象的构造函数参数中最常见的一个是正则表达式的串,另外一个经常使用的是RegexOptions。正则表达式的字符串和正则表达式的语法这里就不罗嗦了,大家有兴趣的话,可以给我写邮件和我讨论讨论。关于RegexOptions,下面是其中一些主要参数的介绍:
      RegexOptions.Compiled         让C#把正则表达式编译成一个Assembly,这样可以在执行正则的时候启动的更快。这个参数需要注意的事情是,使用这个选项时,正则表达式一定是静态的字符串,而不能使动态的字符串(可以想象,动态字符串是不会有任何效果的)。
      RegexOptions.IgnoreCase      让正则表达式匹配的时候忽略大小写。
      RegexOptions.Multiline           多行模式正则匹配。
      RegexOptions.None               不指定任何的选项。
      RegexOptions.RightToLeft      从右向左开始匹配。
      RegexOptions.SingleLine        单行模式正则匹配。

      下面讨论正则表达式的使用:
       Regex token = new Regex(@"((?<protocol>[a-zA-Z]*?)://)?(?<domain>[^/]*)(?<path>.*)", RegexOptions.Compiled);
       Match matchList = token.Match("http://www.sina.com.cn/index.html");

       if (matchList.Success)
       {
                Console.WriteLine( "Protocol:{0},Domain:{1},Path:{2}" ,
                        matchList.Groups["protocol"] ,
                        matchList.Groups["domain"] ,
                        matchList.Groups["path"]) ;
       }
      
      上面的是匹配单行的情况,下面的例子是演示的匹配多个结果的情况:

       Regex token = new Regex(@"\s*((?<protocol>\w*?)://)?(?<domain>[^\/\s]+)(?<path>[^\s]*)", RegexOptions.Compiled);
       MatchCollection matches = token.Matches("http://www.sina.com.cn/index.html http://www.microsoft.com ftp://ftp.cav.com/info.zip");

       if (matches.Count != 0)
       {
                foreach (Match matchList in matches)
                {
                    Console.WriteLine("Protocol:{0},Domain:{1},Path:{2}",
                            matchList.Groups["protocol"],
                            matchList.Groups["domain"],
                            matchList.Groups["path"]);

                    foreach (Capture c in matchList.Captures)
                    {
                        Console.WriteLine("Capture:[" + c + "]");
                    }
                }
       }

      下面是一个Replace的用法,主要目的是为了演示MatchEvaluator.
       public static string ReplaceEva(Match match)
       {
            return match.Groups["protocol"].Value + "://" + "www.google.com/" + match.Groups["path"].Value;
       }

      Regex token = new Regex(@"\s*((?<protocol>\w*?)://)?(?<domain>[^\/\s]+)(?<path>[^\s]*)", RegexOptions.Compiled);
      string strNew = token.Replace("www.sohu.com/index.htm",new MatchEvaluator(ReplaceEva));
      Console.WriteLine("New Line:{0}", strNew);

      MatchEvaluator是一个函数代理,用来处理替换过程中得到的每一个Match。返回的字符串就是替换后的字符串。


      最后演示以下最简单的使用正则进行Splite的操作,例子代码如下:

      Regex r = new Regex("(-)"); 
      string[] s = r.Split("one-two-banana");

      OK, That's all.希望能够对大家有所帮助。