正则表达式

正则表达式是对字符串进行匹配的语法,像name like '%李%'一样,定义了一些特殊的“元字符”,用来判断一个字符串是否满足某个规则。正则表达式非常深,编译器都是基于正则表达式,掌握基本使用即可。

基本元字符

字  符

描  述

\

转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反过来

^

匹配输入字符串的开始位置

$

匹配输入字符串的结束位置

*

匹配前面的零次或多次的子表达式

+

匹配前面的一次或多次的子表达式

?

匹配前面的零次或一次的子表达式

{n}

n是一个非负整数,匹配前面的n次子表达式

{n,}

n是一个非负整数,至少匹配前面的n次子表达式

{n,m}

mn均为非负整数,其中n<=m,最少匹配n次且最多匹配m

?

当该字符紧跟在其他限制符(*,+,?,{n},{n,},{nm})后面时,匹配模式尽可能少的匹配所搜索的字符串

.

匹配除“\n”之外的任何单个字符

(pattern)

匹配pattern并获取这一匹配

(?:pattern)

匹配pattern但不获取匹配结果

(?=pattern)

正向预查,在任何匹配pattern的字符串开始处匹配查找字符串

(?!pattern)

负向预查,在任何不匹配pattern的字符串开始处匹配查找字符串

x|y

匹配xy。例如,‘z|food’能匹配“z”或“food”。‘(z|f)ood’则匹配“zood”或“food”

[xyz]

字符集合。匹配所包含的任意一个字符。例如,‘[abc]’可以匹配“plain”中的‘a’

[^xyz]

负值字符集合。匹配未包含的任意字符。例如,‘[^abc]’可以匹配“plain”中的‘p’

[a-z]

匹配指定范围内的任意字符。例如,‘[a-z]’可以匹配'a'到'z'范围内的任意小写字母字符

[^a-z]

匹配不在指定范围内的任意字符。例如,‘[^a-z]’可以匹配不在‘a’~‘z’'内的任意字符

\b

匹配一个单词边界,指单词和空格间的位置

\B

匹配非单词边界

\d

匹配一个数字字符,等价于[0-9]

\D

匹配一个非数字字符,等价于[^0-9]

\f

匹配一个换页符

\n

匹配一个换行符

\r

匹配一个回车符

\s

匹配任何空白字符,包括空格、制表符、换页符等

\S

匹配任何非空白字符

\t

匹配一个制表符

\v

匹配一个垂直制表符。等价于\x0b和\cK

\w

匹配包括下划线的任何单词字符。等价于‘'[A-Za-z0-9_]’

\W

匹配任何非单词字符。等价于‘[^A-Za-z0-9_]’

说明:

由于在正则表达式中“ \ ”、“ ? ”、“ * ”、“ ^ ”、“ $ ”、“ + ”、“(”、“)”、“ | ”、“ { ”、“ [ ”等字符已经具有一定特殊意义,如果需要用它们的原始意义,则应该对它进行转义,例如希 望在字符串中至少有一个“ \ ”,那么正则表达式应该这么写:\\+ 。

使用Regex.IsMatch(被匹配字符串, 正则表达式)判断是否匹配。C#中表示正则表达式最好前面加上@,可以避免转义带来的困扰。

常见正则表达式

1、 这样写是有缺陷的Regex.IsMatch("18911111234", @"\d{11}")、Regex.IsMatch("3333333333333333", @"\d{11}"),应该使用^$改成Regex.IsMatch("18911111234333", @"^\d{11}$")

2、 手机号:@"^11\d{10}$"

3、 @"^\d{5,10}$"匹配QQ号

4、 ipv4地址:@"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"  正则表达式很难“一步到位”。192.168.1.15

5、 @"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$" 匹配邮箱

6、 [\u4e00-\u9fa5]  单个汉字      @"^[\u4e00-\u9fa5]{2,4}$" 长度为2-4的汉字姓名

7、 身份证号(15位、18位数字):@"^(\d{15})$|^(\d{18})$"

8、 身份证号(18位,最后一位可能是x)  @"^(\d{17})[\dxX]$"

9、 日期格式:^\d{4}\-\d{1,2}\-\d{1,2}$

更多技术请关注

第十五篇 .NET高级技术之正则表达式的更多相关文章

  1. 第十九篇 .NET高级技术之C#中的线程(一)

    原文://http://www.cnblogs.com/miniwiki/archive/2010/06/18/1760540.html 文章系参考转载,英文原文网址请参考:http://www.al ...

  2. 第十八篇 .NET高级技术之Linq与EF Code-First Fluent API基础讲解

    1.FluentApi简介 在这里提供了一个fluentapi基础的DEMO然后咱们在进一步的学习,直接上干货. 第一步在数据库创建一个表:person 第二步:新建控制台程序FluentAPI 第三 ...

  3. 第十六篇 .NET高级技术之序列化

    .net framework的类库中提供了三个可以用于序列化和反序列化的类,分别为BinaryFormatter.SoapFormatter和XmlSerializer. BinaryFormatte ...

  4. 第十四篇 .NET高级技术之反射

    两个现实中的例子:1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况.这是如何做到的呢?B超是B型超声波,它可以透过肚皮通过向你体内发射B型超声波,当超声波遇到内脏壁的时 ...

  5. 第十二篇 .NET高级技术之lambda表达式

    最近由于项目需要,刚刚学完了Action委托和Func<T>委托,发现学完了委托就必须学习lambda表达式,委托和Lambda表达式联合起来,才能充分的体现委托的便利.才能使代码更加简介 ...

  6. 第五篇 .NET高级技术之CTS、CLS、CLR

    CTS.CLS.CLR 1. .Net平台下不只有C#语言,还有VB.Net.F#等语言.IL是程序最终编译的可以执行的二进制代码(托管代码),不同的语言最终都编译成标准的IL(中间语言,MSIL): ...

  7. 第十五篇 Integration Services:SSIS参数

    本篇文章是Integration Services系列的第十五篇,详细内容请参考原文. 简介在前一篇,我们使用SSDT-BI将第一个SSIS项目My_First_SSIS_Project升级/转换到S ...

  8. 【译】第十五篇 Integration Services:SSIS参数

    本篇文章是Integration Services系列的第十五篇,详细内容请参考原文. 简介在前一篇,我们使用SSDT-BI将第一个SSIS项目My_First_SSIS_Project升级/转换到S ...

  9. 解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译)

    解剖SQLSERVER 第十五篇  SQLSERVER存储过程的源文本存放在哪里?(译) http://improve.dk/where-does-sql-server-store-the-sourc ...

随机推荐

  1. TinyXML:属性

    TiXmlAttribute: 代表XML中的属性,TiXmlAttribute中定义了一系列对属性的操作 TiXmlAttribute的友元类: friend class TiXmlAttribut ...

  2. Nova虚拟机迁移

    这里根据我的配置环境只讲述冷迁移(Migrate Instance)需要进行的计算节点配置而不包含热迁移(Live Migrate Instance),后者需要共享存储及Hypervisor的支持. ...

  3. 下载Google官方/CM Android源码自己主动又一次開始的Shell脚本

    国内因为某种原因,下载CM或Google官方的Android源码总easy中断.总看着机器.一中断就又一次运行repo sync还太麻烦,所以我特意编写了一段shell脚本(download.sh). ...

  4. (转载)解决MySql 数据库 提示:1045 access denied for user 'root'@'localhost' using password yes

    今天想用用MySQL 数据库  谁知道老提示 1045 access denied for user 'root'@'localhost' using password yes 最后在csdn 上找到 ...

  5. 在MVC中使用泛型仓储模式和工作单元来进行增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  6. HDU 6143 Killer Names DP+快速密

    Killer Names Problem Description > Galen Marek, codenamed Starkiller, was a male Human apprentice ...

  7. 增加实时性的异常url检测

    技能点: 搭建服务器.restfulapi 在py脚本中调取另一个脚本执行

  8. IE6span 高度问题

    IE6盒子的最小高度为20px,所以设置低于20px大小时,加上_overflow:hidden;

  9. 关于div li 等标签之间自带间距

    可以用float来清除标签之间的间距. ps :ul使用font-size:0 唯一的缺点就是要再次设置LI的font-size

  10. DataSnap的如果网络断线,如何恢复?

    timer代码很简单:var adbsevertime :TDateTime;begin try adbsevertime := ClientModule1.ServerMethods1Client. ...