最近有许多朋友问我正则表达式的问题,简单的说,正则表达式是一种搜索算法,也许你对使用*,?等通配符的使用一点不陌生,但有时候光靠通配符是远远不能满足我们搜索字符串的需求,因此就有人把正则表达式引入进来,下面将介绍在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 |