C#正则表达式快速入门
什么是正则表达式
正则表达式是用来检验和操作字符串的强大工具。简单的理解正则表达式可以认为是一种特殊的验证字符串。正则表达式常见运用是验证用户输入信息格式,比如上面的那组“/w{1,}@/w{1,}/./w{1”,实际上就是验证邮件地址是否合法的;当然正则表达式不仅仅是用于验证,可以说只要运用字符串的地方都可以使用正则表达式;
涉及的基本的类
正则表达式在英文中写作(Regular Expression),根据正则表达式的使用范围和单词意思,.NET将其命名空间设置为System.Text.RegularExpressions;
在该命名空间内包括了8个基本的类:Capture、CaptureCollection、Group、GroupCollection、Match、MatchCollection、Regex和RegexCompilationInfo如图1所示;

Capture 用于单个表达式捕获结果 CaptureCollection 用于一个序列进行字符串捕获 Group 表示单个捕获的结果 GroupCollection 表示捕获组的集会 Match 表示匹配单个正则表达式结果 MatchCollection 表示通过迭代方式应用正则表达式到字符串中 Regex 表示不可变的正则表达式 RegexCompilationInfo 将编译正则表达式需要提供信息
[注意]
本文属于初学正则表达式的入门文章,对于高级的分组(Group)及其涉及语法等在这里不做介绍;
正则表达式基础知识
- 基本语法
在正则表达式中拥有一套自己的语法规则,常见语法包括;字符匹配、重复匹配、字符定位、转义匹配和其他高级语法(字符分组、字符替换和字符决策);
字符匹配语法:
重复匹配语法:
字符定位语法:
转义匹配语法:
- 构造正则表达的方法
构造正则表达式需要涉及Regex类,在Regex类中包括:IsMatch()、Replace()、Split()和Match的类;
(1) IsMatch()方法;
IsMatch()方法实际上是一个返回Bool值得方法,如果测试字符满足正则表达式返回True否则返回False;
例1;判断是非成都地区电话号码合法;
分析:成都地区电话号码组成028********,前面为固定区号028,后面满足8位数字;
设计正则表达式:028/d{8}(解释:028区号固定,后面为8个数字/d组成);
程序代码,如图2所示:
(2) Replace()方法;
Replace()方法实际上是一种替换的方法,替换匹配正则表达式匹配模式;
例2:在发布带有公开电子邮件地址的文章时,替换@位AT避免产生垃圾邮件;
分析:首先需要判断文章中电子邮箱地址,然后执行替换
设计正则表达式:判断电子邮箱表达式”/w{1,}@w{1,}//.”;
程序代码:如图3所示;
(3) Split()方法;
Split()方法实际上是拆分的方法,根据匹配正则表达式进行拆分储存在字符串数组中;
例3:从群发邮件地址中读取所有邮件地址;
分析:群发邮件采用“;”作为分割符,需要通过“;”进行拆分
程序代码:如图4所示;
构建表达式基本方法
构造Regex对象的构造函数包括两个重载,一个是不含参数的构造、另外一个是含有参数的构造函数;
- 基本形式Regex(string pattern);
- 重载形式Regex(string pattern,RegexOptions);
补充:RegexOptions属于枚举类型,包括IgnoreCase(忽略大小写)、ReghtToLeft(从右向左)、None(默认)、CultureInvariant(忽略区域)、Multline(多行模式)和SingleLine(单行模式);
例4,建立一个合法ISBN验证格式;
分析:ISBN格式为X-XXXXX-XXX-X;
正则表达式格式:/d-/d{5}-/d{3}-/d
构造该正则表达式函数Regex ISBNRegex = new Regex(表达式,参数为空)
详细代码:如图5所示;
编写一个检验程序
为了方便自己在学习正则表达式和快速检验自己编写表达式语句是否正确,下面提供一个IsMatch()方法正则表达式验证器编写;
- 打开VS.NET,选择新建项目中的Visual C#项目的Windows应用程序,取名为“Regex_Tools”;
- 然后编写如图6所示的界面
图6 正则表达式IsMatch方法验证器 - 然后在该窗体声明中增加正则表达式命名空间声明using System.Text.RegularExpressions;
- 编写下列代码
- 编写一段私有的判断参数的方法,如图7所示;
图7私有验证参数判断方法 - 编写判断按钮的方法,如图8所示;
图8 IsMatch验证判断按钮方法 - 编写清空按钮的方法,所有的文本框等于空;
- 编写一段私有的判断参数的方法,如图7所示;
- 编译该程序,一个简单的正则表达式验证器就成功生成了。