C#正则表达式编程(一):C#中有关正则的类

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://zhoufoxcn.blog.51cto.com/792419/280320

正则表达式是一门灵活性非常强的语言,匹配同样的字符串可能在不同的开发人员那里会得到不同的结果,在平常的时候也是用的时候看看相关资料,不用的时候就丢在脑后了,尽管在处理大部分情况下都能迅速处理,但是处理一些复杂的情况效率仍是不高,借着前阵子做过的一个项目涉及到正则表达式的机会,将有关资料阅读了一遍并结合了自己的体会,整理了几篇利用C#进行正则表达式编程的文章,一来加深自己的印象和理解,二来供博客上的读者学习借鉴。
在.NET中提供了对正则表达式的支持,并且提供了相关的类,分别有:Regex、Match、Group、Capture、RegexOptions、MatchCollection、GroupCollection、CaptureCollection。它们之间的关联如下:
 
对它们描述如下:
Regex:正则表达式类,代表了一个不可变的正则表达式。
Match:代表了Regex类的实例的一次匹配结果,可以通过Regex的Match()实例方法返回一个Match的实例。
MatchCollection:代表了Regex类的实例的所有匹配结果,可以通过Regex的Matches()实例方法返回一个MatchCollection的实例。
Group:表示单个捕获组的结果。由于一次匹配可能包含0个、1个或多个分组,所以Match的实例中返回的是捕获组集合的结果,即GroupCollection。
GroupCollection:表示单个匹配中的多个捕获组的集合,可以通过Match的Groups实例属性返回GroupCollection的实例。
Capture:表示单个捕获中的一个子字符串。同Group一样,由于一个捕获中可能包含0个、1个或多个子字符串,所以Group的实例中返回的是子字符串集合的结果,即CaptureCollection。
CaptureCollection:默认表示按照从里到外、从左到右的顺序由捕获组匹配到的所有子字符串集合,可以通过Group或者Match的Captures实例属性返回CaptureCollection的实例。注意,可以使用RegexOptions.RightToLeft来改变这种匹配顺序。
RegexOptions:提供用于设置正则表达式选项的枚举值。 像上面提到的RightToLeft就是它的一个枚举值之一,除此之外还有None、IgnoreCase、Multiline、ExplicitCapture、Compiled、Singleline、IgnorePatternWhitespace、RightToLeft、ECMAScript及CultureInvariant。RegexOptions枚举值可以相加,比如我们想匹配不区分大小写的字符串“abc”并且还想提高一下执行速度,那么可以写如下代码:
RegexOptions options=RegexOptions.IgnoreCase|RegexOptions.Compiled;
Regex regex=new Regex("abc",options);

Regex、Match、Group及Capture的关系及成员
 
从上图可以看出Regex类提供了许多静态方法,很多方法还提供了多种重载方式(在图中对存在多种参数重载的方法都以“...”表示),除此之外我们还会发现Capture、Group及Match之间存在继承关系(说实在话刚开始用的时候我发现它们之间存在着很多相同的字段,这让我当时迷惑不已,希望大家看到这个图后不要再像我当初那样迷惑了)。
在使用C#中的正则表达式进行文本处理之前先花点时间了解一下.NET中有关正则表达式的类和它们之间的关系是有必要的,这篇就算是预热篇了,在开始学习正则表达式之前做做热身运动。虽然在C#中有关正则表达式的类不多,但是对于初学者来说还是容易引起混淆,从而出现不知道该用哪些类的哪些方法或者属性的情况,这篇算是做个初步介绍吧。下一篇就先讲述Regex类,利用Regex可以用来替换、分割和处理字符串。
周公
2010年2月22日

本文出自 “周公(周金桥)的专栏” 博客,请务必保留此出处http://zhoufoxcn.blog.51cto.com/792419/280320

时间: 2024-12-13 06:44:20

C#正则表达式编程(一):C#中有关正则的类的相关文章

正则表达式学习与python中的应用

目录: 一.正则表达式的特殊符号 二.几种重要的正则表达式 三.python的re模块应用 四.参考文献 一.正则表达式的特殊符号 特殊符号可以说是正则表达式的关键,掌握并且可以灵活运用重要的python符号,基本就搞定了正则表达式,不过我不敢说自己已经到了炉火纯青的地步. .(点号),该符号可以匹配任何的字符,当然要换行符除外.在python中,如果存在re.DOTALL,那么即使是换行符,也同样可以匹配,这个DOTALL就是一个标记flag. eg:re.compile(r'\b\w.’,r

java中关于正则一些基础使用

这是本人的第一篇技术型博客,希望能帮到有需要的朋友.-----转载请注明出处. 在之前工作中,需要对很多字符串进行处理.我现在记录下来,以免以后遗忘. 对于正则处理相关的知识,我一开始是从网上找资料配合使用Java API1.6的一个中文版进行学习,很感谢翻译这个版本的团队(机构)或者个人,很感谢那些无私分享自己的知识的朋友. 下文中对于正则的相关知识,现在我是从oracle提供的最新的Java API,可能和以前我看得1.6有些出入,贴出API地址:http://docs.oracle.com

js中常用正则

/校验是否全由数字组成 ? 1 2 3 4 5 6 function isDigit(s) { var patrn=/^[0-9]{1,20}$/; if (!patrn.exec(s)) return false return true } 匹配中文字符的正则表达式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^x00-xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 匹配空白行的

PHP中的正则

概述 正则表达式是一种描述字符串结果的语法规则,是一个特定的格式化模式,可以匹配.替换.截取匹配的字符串. j简单的说就是通过一些规定的符号和字符组合成的一种语法规则 其实,只有了解一种语言的正则使用,其他语言的正则使用起来,就相对简单些.文本主要围绕解决下面问题展开. 有哪些常用的转义字符 什么是限定符与定位符 什么是单词定位符 特殊字符有哪些 什么是逆向引用以及怎样使用逆向引用 匹配模式 php中怎样使用正则表达式 php中哪些方面需要用到正则 怎样进行邮箱匹配,url匹配,手机匹配 怎样使

java中的正则操作总结

http://www.cnblogs.com/nerxious/archive/2013/01/03/2842910.html 正则表达式在处理字符串的效率上是相当高的 关于正则表达式的使用,更多的是自己的经验,有兴趣可以参阅相关书籍 这里主要写一下java中的正则操作方法 实例1:匹配 import java.util.Scanner; class Demo { public static void main(String[] args) { Scanner sc = new Scanner(

ASP.NET中 RegularExpressValidator(正则验证)的使用

原文:ASP.NET中 RegularExpressValidator(正则验证)的使用 ylbtech-ASP.NET-Control-Validator: RegularExpressValidator(正则验证)的使用 ASP.NET中 RegularExpressValidator(正则验证)的使用. 1.A,运行效果返回顶部 RegularExpressionValidator:正则验证 属性: ControlToValidate:要验证的控件 ErrorMessage:错误提示信息

为什么函数式编程在Java中很危险?

摘要:函数式编程这个不温不火的语言由来已久.有人说,这一年它会很火,尽管它很难,这也正是你需要学习的理由.那么,为什么函数式编程在Java中很危险呢?也许这个疑问普遍存在于很多程序员的脑中,作者Elliotte对此发表了一些见解,我们一起来看看他是怎么说的. 在我的日常工作中,我身边的开发者大多是毕业于CS编程顶级院校比如MIT.CMU以及Chicago,他们初次涉及的语言是Haskell.Scheme及Lisp.他们认为函数式编程是一种自然的.直观的.美丽的且高效的编程样式.但奇怪的是,我和我

在magento中使用正则式

$sqlCondition = "IFNULL(_table_name.value, _table_name_default.value) REGEXP '^[^a-zA-Z]'" $collection->getSelect()->where($sqlCondition) 在magento中使用正则式,布布扣,bubuko.com

编程算法 - 数组中的逆序对 代码(C)

数组中的逆序对 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 在数组中的两个数字如果前面一个数字大于后面的数字, 则这两个数字组成一个逆序对. 输入一个数组, 求出这个数组中的逆序对的总数. 使用归并排序的方法, 辅助空间一个排序的数组, 依次比较前面较大的数字, 算出整体的逆序对数, 不用逐个比较. 时间复杂度: O(nlogn) 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: