IMZRH的日志

努力成为一个有用的人

导航

[转]C#中正则表达式的应用

Posted on 2006-11-17 13:58  张荣华  阅读(1064)  评论(0编辑  收藏  举报
最近有许多朋友问我正则表达式的问题,简单的说,正则表达式是一种搜索算法,也许你对使用*,?等通配符的使用一点不陌生,但有时候光靠通配符是远远不能满足我们搜索字符串的需求,因此就有人把正则表达式引入进来,下面将介绍在C#中如何应用正则表达式。

C#中的正则表达式包含在.NET基础类库的一个名称空间下,这个名称空间就是System.Text.RegularExpressions。该名称空间包括8个类,1个枚举,1个委托。他们分别是:
                     Capture: 包含一次匹配的结果;
                     CaptureCollection: Capture的序列;
                     Group: 一次组记录的结果,由Capture继承而来;
                     GroupCollection:表示捕获组的集合
                     Match: 一次表达式的匹配结果,由Group继承而来;
                     MatchCollection: Match的一个序列;
                     MatchEvaluator: 执行替换操作时使用的委托;
                     Regex:编译后的表达式的实例。
                     RegexCompilationInfo:提供编译器用于将正则表达式编译为独立程序集的信息
                     RegexOptions 提供用于设置正则表达式的枚举值

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

这里不打算详细介绍这些方法,有兴趣的朋友,请阅读 ms-help://MS.NETFrameworkSDKv1.1.CHS/cpguidenf/html/cpconusingregularexpressionclasses.htm

下面通过举几个例子来说明几种常用的正则表达式应用
        注意先引入空间:using System.Text.RegularExpressions;

  1)IsMatch,判断指定文本是否匹配给出的正则表达式,匹配的话返回true
          判断字符串是否为合法的E-Mail地址:

                Regex emailRegex = new Regex("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
                String myEmail = "tangzehuan@163.com";

                if(emailRegex.IsMatch(myEmail))
                {
                    Response.Write(myEmail + "是正确的邮箱地址");
                }
                else
                {
                    Response.Write(myEmail + "不是正确的邮箱地址");               
                }

                输出结果为:
               
tangzehuan@163.com是正确的邮箱地址

    
2)Replace,替换匹配的字符
          查找替换HTML标识符:

                Regex fontRegex = new Regex("<font color=#000000>([^[<>]*)</font>");
                String myHTML = "ab12cd<font color=#000000>akjdflkjas中文</font>efg<font color=#FF0000>测试文字<B>YYY中文<B></font>";
               
                myHTML = fontRegex.Replace(myHTML,"");

                Response.Write(myHTML);

             输出结果为:
             ab12cdefg<font color=#FF0000>测试文字<B>YYY中文<B></font>
             从结果已经看出,已经把<font color=#000000>akjdflkjas中文</font>这段HTML标识给替换掉了

    
3)GroupCollection,查找带参数的正则表达式
            
          搜索学生资料中的学号:
                Regex digitregex = new Regex("学号:(\\d+)");

                String s = "姓名: tangcfzs  学号:36  成绩:67";
                s += "\n姓名: tangzffs  学号:37  成绩:77";
                s += "\n姓名: tangffrs  学号:38  成绩:87";
                s += "\n姓名: tangfzhs  学号:39  成绩:86";
               
                Match m = digitregex.Match(s);

                while (m.Success)
                {
                    Group g = m.Groups[1];
                    Response.Write(g + "<br>");
                    m = m.NextMatch();
                }

                 输出结果为:
                    36
                    37
                    38
                    39
      


上面只是通过例子简单介绍了正则表达式的使用,其实最难的还是写正则表达式,一些常用的正则表达式请看http://www.cnblogs.com/zhangronghua/archive/2006/11/09/555038.html