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:不对字符串中的转义字符转义。

下面介绍他们的用途:
        先看一个简单的匹配例子,我们首先从使用Regex、Match类的简单表达式开始学习。 Match m = Regex.Match("abracadabra", "(a|b|r)+"); 我们现在有了一个可以用于测试的Match类的实例,例如:if (m.Success){},如果想使用匹配的字符串,可以把它转换成一个字符串:   MesaageBox.Show("Match="+m.ToString()); 这个例子可以得到如下的输出: Match=abra。这就是匹配的字符串了。

Regex 类表示只读正则表达式类。它还包含各种静态方法(在下面的实例中将逐一介绍),允许在不显式创建其他类的实例的情况下使用其他正则表达式类。

以下代码示例创建了 Regex 类的实例并在初始化对象时定义一个简单的正则表达式。声明一个Regex对象变量:Regex objAlphaPatt;,接着创建Regex对象的一个实例,并定义其规则:objAlphaPatt=new Regex("[^a-zA-Z]");

IsMatch方法指示 Regex 构造函数中指定的正则表达式在输入字符串中是否找到匹配项。这是我们使用C#正则表达式时最常用的方法之一。下面的例子说明了IsMatch方法的使用:
if( !objAlphaPatt.IsMatch("testisMatchMethod"))
 lblMsg.Text = "匹配成功";
else
 lblMsg.Text = "匹配不成功";
这段代码执行的结果是“匹配成功”
if( ! objAlphaPatt.IsMatch("testisMatchMethod7654298"))
 lblMsg.Text = "匹配成功";
else
 lblMsg.Text = "匹配不成功";
这段代码执行的结果是“匹配不成功”

Escape方法表示把转义字符作为字符本身使用,而不再具有转义作用,最小的元字符集(\、*、+、?、|、{、[、(、)、^、$、.、# 和空白)。Replace方法则是用指定的替换字符串替换由正则表达式定义的字符模式的所有匹配项。看下面的例子,还是使用上面定义的Regex对象:objAlphaPatt.Replace("this [test] ** replace and escape" ,Regex.Escape("()"));他的返回结果是:this\(\)\(\)test\(\)\(\)\(\)\(\)\(\)replace\(\)and\(\)escape,如果不是Escape的话,则返回结果是:this()()test()()()()()replace()and()escape,Unescape 反转由 Escape 执行的转换,但是,Escape 无法完全反转 Unescape。

Split方法是把由正则表达式匹配项定义的位置将输入字符串拆分为一个子字符串数组。例如:
Regex r = new Regex("-"); // Split on hyphens.
string[] s = r.Split("first-second-third");
for(int i=0;i<s.Length;i++)
{
 Response.Write(s[i]+"<br>");
}

执行的结果是:
First
Second
Third
看上去和String的Split方法一样,但string的Split方法在由正则表达式而不是一组字符确定的分隔符处拆分字符串。

Match方法是在输入字符串中搜索正则表达式的匹配项,并Regex 类的 Match 方法返回 Match 对象,Match 类表示正则表达式匹配操作的结果。下面的例子演示Match方法的使用,并利用Match对象的Group属性返回Group对象:

string text = @"public string testMatchObj string s string  match ";
string pat = @"(\w+)\s+(string)";
// Compile the regular expression.
Regex r = new Regex(pat, RegexOptions.IgnoreCase);
// Match the regular expression pattern against a text string.
Match m = r.Match(text);
int matchCount = 0;
while (m.Success)
{
 Response.Write("Match"+ (++matchCount) + "<br>");
 for (int i = 1; i <= 2; i++)
 {
  Group g = m.Groups[i];
  Response.Write("Group"+i+"='" + g + "'"  + "<br>");
  CaptureCollection cc = g.Captures;
  for (int j = 0; j < cc.Count; j++)
  {
   Capture c = cc[j];
   Response.Write("Capture"+j+"='" + c + "', Position="+c.Index + "<br>");
  }
 }
 m = m.NextMatch();
}

该事例运行结果是:
Match1
Group1='public'
Capture0='public', Position=0
Group2='string'
Capture0='string', Position=7
Match2
Group1='testMatchObj'
Capture0='testMatchObj', Position=14
Group2='string'
Capture0='string', Position=27
Match3
Group1='s'
Capture0='s', Position=34
Group2='string'
Capture0='string', Position=36

MatchCollection 类表示成功的非重叠匹配的只读的集合,MatchCollection 的实例是由 Regex.Matches 属性返回的,下面的实例说明了通过在输入字符串中找到所有与Regex中指定的匹配并填充 MatchCollection。

MatchCollection mc;
Regex r = new Regex("match");
mc = r.Matches("matchcollectionregexmatchs");
for (int i = 0; i < mc.Count; i++)
{
 Response.Write( mc[i].Value + " POS:" + mc[i].Index.ToString() + "<br>");
}
该实例运行的结果是:
match POS:0
match POS:20

转载于:https://blog.51cto.com/thinkingod/108844

全面剖析C#正则表达式相关推荐

  1. 正则表达式到底是什么?

    这里是修真院前端小课堂,每篇分享文从 八个方面深度解析前端知识/技能,本篇分享的是: [正则表达式到底是什么?] 大家好,我是IT修真院武汉分院web第16期的学员孟晨,一枚正直纯洁善良的web程序员 ...

  2. 检查Email格式是否合法的正则表达式

    "^\\w+([-_.]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,6})+$" 这个是我在Java程序中检查Email格式是否合法的正则表达式,在网上 ...

  3. 面试题: !=!=未看12 略多 sql语句练习 非常 有用

    JAVA面试总结 2015年03月25日 16:53:40 阅读数:4306 刚才看到的,先转载过来,没准以后用到-- 面试总结 2013年8月6日: 问题2:Hibernate的核心接口有哪些?   ...

  4. 正则表达式的环视深度剖析

    文章目录 一.环视基础 二.顺序环视匹配过程 (一)顺序肯定环视匹配过程 (二)顺序否定环视匹配过程 三.逆序环视匹配过程 (一)逆序环视基础 (二)逆序肯定环视匹配过程 1. 逆序表达式的长度固定, ...

  5. Python re模块 (正则表达式用法剖析详解)

    阅读目录 正则表达式 字符组 字符(元字符) 量词(个数) 边界字符(也属于元字符) 分组()与或 |[^] 转义字符 贪婪模式和非贪婪模式 re模块下的常用方法 re.match() re.sear ...

  6. 详解剖析Shell中的正则表达式

    正则表达式 概述 基础正则表达式常见元字符 扩展正则表达式元字符 正则表达式语法支持情况 匹配手机号 匹配邮箱 概述 正则表达式又称规则表达式(Regular Expression)是对字符串操作的一 ...

  7. 性能服务器解读,【MySQL数据库】第三章解读:服务器性能剖析(上)

    前言: 保持空杯精神,使用性能剖析,专注于测量服务器的时间花费在哪里,思考1.如何确认服务器是否达到了性能最佳状态,2.某条语句为什么不够快,诊断被用户描述为"停顿.堆积.卡死"的 ...

  8. 【Web Shell】- 技术剖析中国菜刀 - Part II

    在第一部分,简单描述了中国菜刀的基本功能.本文我将剖析中国菜刀的平台多功能性.传输机制.交互模式和检测.我希望通过我的讲解,您能够根据您的环境检测出并清除它. 平台 那么中国菜刀可以在哪些平台上运行? ...

  9. 深度剖析Zabbix Web scenarios数据表结构

    深度剖析Zabbix Web scenarios数据表结构 前言 因开发需求,需要解析Zabbix web监控数据表结构:因为网上关于Zabbix数据表结构解析的比较少,所以心血来潮写了一篇作为记录. ...

最新文章

  1. LA2678最短子序列
  2. 猪行天下之Python基础——1.1 Python开发环境搭建
  3. ipsec *** 的总结性谈论
  4. java php serialize_PHP serialize 和 JSON 解析与区别
  5. python 读取bin文件
  6. UVa 10003 Cutting Sticks(区间DP)
  7. Clash of Clans通关秘诀
  8. Android学习笔记之如何将数据保存到SDCard
  9. Ceph OSD处理客户端写操作处理流程
  10. 写着代码的插画师—王凌 |WLOP|
  11. echarts百分比柱形图
  12. 英才计划计算机潜质测评试题,2018年“英才计划”综合实践活动通知
  13. 微服务开源生态报告 No.1
  14. 冷热酸甜、想成就成?冷酸灵母公司登康口腔欲在深交所主板上市
  15. 2023年广州深圳市两融开户佣金和融资融券利息率最低多少?哪个券商最低?支持量化交易
  16. 浅谈npm、yarn、cnpm、pnpm(内附网址链接)
  17. 微机原理与接口技术课程设计——数字电压表的设计(含完整代码与实验连接图)
  18. 《CCNP ROUTE 300-101学习指南》——1.4节路由和TCP/IP操作
  19. finder是什么,mac 窗口功能介绍
  20. Canvas模仿微信红包照片

热门文章

  1. VTK:IO之ReadDICOM
  2. VTK:几何对象之OpenVRCylinder
  3. OpenCV实现幻灯片模糊slides blur的实例(附完整代码)
  4. STL常用的查找算法
  5. python打包脚本_py2exe打包python脚本
  6. 3.将maven项目jar纳入maven仓库,Mave项目依赖另外一个Maven项目的案例
  7. Linux中快捷键的使用,who命令,rm命令,ps命令,cd命令,kill命令,find命令,grep命令,tar命令(gz、tar、bz2),用户管理,vim部分配置,相关命令
  8. Java与C#平台通信 WCF CXF SOAP
  9. mysql max_allowed_packet 设置过小导致记录写入失败
  10. SQL基础操作_5_字符串处理