您的位置: 主页 > 常见问题 > C#正则表达式快速入门

C#正则表达式快速入门

发布时间:2023-08-05 10:41:14 | 发布者:往流科技

[介绍]


作者将自己在学习正则表达式中的心得和笔记作了个总结性文章,希望对初学C#正则表达式的读者有帮助。

[内容]

  1. 什么是正则表达式

  2. 涉及的基本的类

  3. 正则表达式基础知识

  4. 构建表达式基本方法

  5. 编写一个检验程序

  6. 参考资料



[正文]


    对于初学者看到类似“w+@w+.w{1,3}”这样复杂没有规律的字符,就会莫名产生一种恐惧感。其实正则表达式和字符串(String)的使用同样非常简单。下面让我们逐步地走进正则表达式的世界!


什么是正则表达式


    正则表达式是用来检验和操作字符串的强大工具。简单的理解正则表达式可以认为是一种特殊的验证字符串。正则表达式常见运用是验证用户输入信息格式,比如上面的那组“w{1,}@w{1,}.w{1”,实际上就是验证邮件地址是否合法的;当然正则表达式不仅仅是用于验证,可以说只要运用字符串的地方都可以使用正则表达式;


涉及的基本的类


    正则表达式在英文中写作(Regular Expression),根据正则表达式的使用范围和单词意思,.NET将其命名空间设置为System.Text.RegularExpressions;


    在该命名空间内包括了8个基本的类:Capture、CaptureCollection、Group、GroupCollection、Match、MatchCollection、Regex和RegexCompilationInfo如图1所示;



图1 MSDN Library中正则表达式命名空间



[注意]

    本文属于初学正则表达式的入门文章,对于高级的分组(Group)及其涉及语法等在这里不做介绍;



正则表达式基础知识


  • 基本语法


    在正则表达式中拥有一套自己的语法规则,常见语法包括;字符匹配、重复匹配、字符定位、转义匹配和其他高级语法(字符分组、字符替换和字符决策);


    字符匹配语法:













字符语法语法解释语法例子
d匹配数字(0~9)‘d’匹配8,不匹配12;
D匹配非数字‘D’匹配c,不匹配3;
w匹配任意单字符‘ww’ 匹配A3,不匹配@3;
W匹配非单字符‘W’匹配@,不匹配c;
s匹配空白字符‘dsd’匹配3 d,不匹配abc;
S匹配非空字符‘SSS’匹配A#4,不匹配3 d;
.匹配任意字符‘....’匹配A$ 5,不匹配换行;
[…]匹配括号中任意字符[b-d]匹配b、c、d, 不匹配e;
[^…]匹配非括号字符[^b-z]匹配a,不匹配b-z的字符;


    重复匹配语法:










重复语法语法解释语法例子
{n}匹配n次字符d{3}匹配ddd,不匹配dd或dddd
{n,}匹配n次和n次以上w{2}匹配ww和www以上,不匹配w
{n,m}匹配n次上m次下s{1,3}匹配s,ss,sss,不匹配ssss
?匹配0或1次5?匹配5或0,不匹配非5和0
+匹配一次或多次S+匹配一个以上S,不匹配非一个以上S
*匹配0次以上W*匹配0以上W,不匹配非N*W


    字符定位语法:











重复语法语法解释语法例子
^定位后面模式开始位置
$前面模式位于字符串末端
A前面模式开始位置
z前面模式结束位置
Z前面模式结束位置(换行前)
匹配一个单词边界
B匹配一个非单词边界


    转义匹配语法:





  • 构造正则表达的方法


    构造正则表达式需要涉及Regex类,在Regex类中包括:IsMatch()、Replace()、Split()和Match的类;


(1) IsMatch()方法;


    IsMatch()方法实际上是一个返回Bool值得方法,如果测试字符满足正则表达式返回True否则返回False;






(2) Replace()方法;


    Replace()方法实际上是一种替换的方法,替换匹配正则表达式匹配模式;







图3 “例2”Replace方法是用例


(3) Split()方法;


    Split()方法实际上是拆分的方法,根据匹配正则表达式进行拆分储存在字符串数组中;





构建表达式基本方法


    构造Regex对象的构造函数包括两个重载,一个是不含参数的构造、另外一个是含有参数的构造函数;



  • 基本形式Regex(string pattern);

  • 重载形式Regex(string pattern,RegexOptions);


    补充:RegexOptions属于枚举类型,包括IgnoreCase(忽略大小写)、ReghtToLeft(从右向左)、None(默认)、CultureInvariant(忽略区域)、Multline(多行模式)和SingleLine(单行模式);






编写一个检验程序


    为了方便自己在学习正则表达式和快速检验自己编写表达式语句是否正确,下面提供一个IsMatch()方法正则表达式验证器编写;



  1. 打开VS.NET,选择新建项目中的Visual C#项目的Windows应用程序,取名为“Regex_Tools”;

  2. 然后编写如图6所示的界面




    图6 正则表达式IsMatch方法验证器



  3. 然后在该窗体声明中增加正则表达式命名空间声明using System.Text.RegularExpressions;

  4. 编写下列代码


    • 编写一段私有的判断参数的方法,如图7所示;



      图7私有验证参数判断方法



    • 编写判断按钮的方法


    • 编写清空按钮的方法,所有的文本框等于空;

  5. 编译该程序,一个简单的正则表达式验证器就成功生成了