[.net]正则表达式整理

本文深入探讨了正则表达式的基础知识及应用技巧,重点介绍了Match、Group与Capture的概念及其在.NET框架下的实现方式,并提供了实用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正则表达式在处理字符串方面具有强大的优势,所以整理了一下主要的知识点,希望对大家有所帮助。通过这篇文章我们能够理清Match,Group,Capture的区别和联系。(如果您已经清楚,则没有读下去的必要了:p)

.net下正则表达式处于System.Text.RegularExpression 命名空间下,主要由几个类构成:Regex,Match,Group,Capture。

Regex表示只读的正则表达式类,它包含很多静态方法用于匹配,是我们调用正则表达式的起点。Match方法的介绍留到后面,这里先介绍一下Regex.Replace方法,应用该方法可以快捷的替换字符串。该方法有多个重载的列表,其中比较常用的有2个,一个是 Replace(string, string, string),最后一个string可以用"$1,2"等来表示用捕获的分组替换原来的字符串,例如string s = Regex.Replace(" abra ddd ", @"^/s*(.*?)/s(.*?)/s*$", "$2");则返回的是该输入的第二个分组的内容"ddd",关于分组看下面的match介绍。还有一个是Replace(string,MatchEvaluator),其中MatchEvaluator是一个签名为string (Match)的委托,那么我们就可以通过定义一个委托方法,来处理返回字符串。

Match表示匹配操作的结果。它返回通过正则表达式在输入串中匹配到的第一个结果。例如以abc(正则)匹配123abc456abc(输入),则会得到2个Match。所以我们直接调用Regex r = new Regex("abc");Match m = r.Match("123abc456abc");则返回的m只有第一个abc,所以如果我们想得到第一个匹配时可以调用一次Match就可以了。如果我们想遍历所有的匹配,则需要使用Matches方法返回MatchCollection来遍历,或者用Match方法做一个循环。例如MatchCollection mathes =r.Matches(……);或者while(m.Success){……;m = m.NextMatch();}

当然我们不会只写这么简单的正则表达式,很多时候需要做一些分组来方便字符串的处理,这就用到了Group和GroupCollection。我们在用正则表达式进行匹配时,始终默认整个正则表达式作为第一个分组(Group),例如"a((b)c)",就包含3个Group:abc,bc,b(从左至右),这3个Group构成了这个Match的GroupCollection。由于正则表达式的元字符的原因,每个Group又可能包含若干个捕获(Capture),例如用"(abc)+"匹配"abcabcabcddd"时,就得到2个Group,第一个是默认的整个正则表达式匹配的分组(abcabcabc),由于整个表达式默认执行的是贪婪匹配,所以匹配了最多可能的abc串,所以这个group只有一个capture。第二个Group是用分组"(abc)+"来捕获的,由于存在3个abc所以他捕获了3个Capture,分别为3个abc。直接访问Group.Value,返回的则是该组最后一个Capture的值。

举例:通过这个例子可以熟悉怎么读取匹配的结果。
例子程序


将会产生如下输出:
Captured groups = 2
Captures count = 1
AbcAbcAbc   Starts at character 3
Captures count = 3
Abc   Starts at character 3
Abc   Starts at character 6
Abc   Starts at character 9

附录:
正则表达式测试工具:http://regulator.sourceforge.net/
关于正则表达式的写法:http://www.cnblogs.com/mancini/archive/2005/03/21/122819.html 

http://www.cnblogs.com/mancini/archive/2006/08/01/465400.html 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值