C#正则表达式快速入门

对于初学者看到类似“/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。

Capture用于单个表达式捕获结果,CaptureCollection用于一个序列进行字符串捕获,Group表示单个捕获的结果,GroupCollection表示捕获组的集合,Match表示匹配单个正则表达式结果,MatchCollection表示通过迭代方式应用正则表达式到字符串,Regex表示不可变的正则表达式,RegexCompilationInfo将编译正则表达式需要提供信息

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

正则表达式基础知识基本语法

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

字符匹配语法:

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

重复匹配语法:

语法解释
语法例子{n}匹配n次字符/d{3}匹配/d/d/d,不匹配/d/d或/d/d/d/d{n,}匹配n次和n次以上/w{2}匹配/w/w和/w/w/w以上,不匹配/w{n,m}匹配n次上m次下/s{1,3}匹配/s,/s/s,/s/s/s,不匹配/s/s/s/s?匹配0或1次5?匹配5或0,不匹配非5和0+匹配一次或多次/S+匹配一个以上/S,不匹配非一个以上/S*匹配0次以上/W*匹配0以上/W,不匹配非N*/W

字符定位语法:

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

转义匹配语法:

涉及字符(语法解释)
语法例子“/”+实际字符/ . * + ?

( ) { }^ $ 例如://匹配字符“/”/n匹配换行/r匹配回车/t匹配水平制表符/v匹配垂直制表符/f匹配换页/nnn匹配一个8进制ASCII/xnn匹配一个16进制ASCII/unnnn匹配4个16进制的Uniode/c+大写字母匹配Ctrl-大写字母例如:/cS-匹配Ctrl+S构造正则表达的方法

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

(1) IsMatch()方法;

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

例1;判断成都地区电话号码合法性;分析:成都地区电话号码组成028********,前面为固定区号028,后面满足8位数字;设计正则表达式:028/d{8}(解释:028区号固定,后面为8个数字/d组成);

(2) Replace()方法;

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

例2:在发布带有公开电子邮件地址的文章时,替换@位AT避免产生垃圾邮件;分析:首先需要判断文章中电子邮箱地址,然后执行替换设计正则表达式:判断电子邮箱表达式”/w{1,}@w{1,}//.”; 

(3) Split()方法;

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

构造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 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值