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. 进军“手机照相馆”:京东要和3C厂商干什么?
  2. 【自动驾驶】13. Apollo交通信号灯感知
  3. 阿里云专家手把手教你重塑 IT 架构!
  4. 正则表达式(Java版整理)
  5. 【转载保存】ExecutorService中submit和execute的区别
  6. harbor搭建与使用
  7. 【docker】win10子系统ubuntu安装docker
  8. python redis pipeline 堆积_Redis Pipeline python
  9. 清除浮动的七种方式方法(实例代码讲解)
  10. mysql 字符串 反转_MySQL笔记之字符串函数的应用
  11. VirtualBox虚拟机压缩减少体积
  12. Java 认证考试 OCAJP 经验总结
  13. 优雅的避免字体侵权——微软雅黑并不免费
  14. Everything Toolbar - 文件搜索神器everything的增强插件
  15. python的下载与安装小牛学堂_Python学习_Day1
  16. JavaScript/DHTML代码
  17. linux学习记录(二)
  18. python函数ppt_如何用 Python 让你的PPT数据动起来
  19. 神经网络学习小记录2——利用tensorflow构建循环神经网络(RNN)
  20. 基于PHP+MySQL的服装购物商城系统#毕业设计

热门文章

  1. VTK:网格之FillHoles
  2. OpenCV cv::reduce用法的实例(附完整代码)
  3. OpenGL Texture Coordinate Wrapping纹理坐标包装的实例
  4. QML基础类型之variant
  5. 如何用python写串口通信软件_如何用python写个串口通信的程序?
  6. 14.grafana导入导出;Grafana的安装和Influxdb数据源配置
  7. 3.内存分配、逃逸分析与栈上分配、直接内存和运行时常量池、基本类型的包装类和常量池、TLAB、可达性分析算法(学习笔记)
  8. EasyUI表单验证,自定义插件验证,自定义js插件验证,远程验证,常见手机号,中英文,qq等验证规则验证
  9. 在电脑上安装Linux操作系统(ubuntu)
  10. Eclipse Memory Analyzer 安装(Update Site: http://download.eclipse.org/mat/1.3.1/update-site/ )