惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
腾讯CDC
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
L
LINUX DO - 热门话题
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Project Zero
Project Zero
V
Vulnerabilities – Threatpost
Cisco Talos Blog
Cisco Talos Blog
P
Palo Alto Networks Blog
C
Cisco Blogs
A
Arctic Wolf
月光博客
月光博客
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss
量子位
小众软件
小众软件
Latest news
Latest news
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Microsoft Security Blog
Microsoft Security Blog
T
The Exploit Database - CXSecurity.com
Security Latest
Security Latest
N
Netflix TechBlog - Medium
K
Kaspersky official blog
人人都是产品经理
人人都是产品经理
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园_首页
Y
Y Combinator Blog
P
Proofpoint News Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
M
MIT News - Artificial intelligence
T
Threat Research - Cisco Blogs
S
Schneier on Security
D
Docker
Scott Helme
Scott Helme
MyScale Blog
MyScale Blog
Spread Privacy
Spread Privacy
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
GbyAI
GbyAI
有赞技术团队
有赞技术团队
Google DeepMind News
Google DeepMind News
The Hacker News
The Hacker News
H
Help Net Security
Simon Willison's Weblog
Simon Willison's Weblog
J
Java Code Geeks
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tenable Blog
B
Blog
Know Your Adversary
Know Your Adversary
IT之家
IT之家

博客园 - 小诈

今日所思 伟大的意大利夺冠了!疯狂庆祝! word add-in 卸载时如何清除自定义的按钮和菜单 制作包含.net framework的安装包 解决不能上网的问题(Wincock绑架) [ASP.NET揭密读书笔记]额外的控件和资源 [ASP.NET揭密读书笔记]应用程序跟踪和监视 [ASP.NET揭密读书笔记]ADO.NET介绍 [ASP.NET揭密读书笔记]用户自定义控件 [ASP.NET揭密读书笔记]连接池 安装Ubuntu 痛苦的胃镜检查 [转载]微软好员工的十个标准 新年新气象,恭喜发财 WEB中服务器端Table的行集中要注意ViewState 2005年年终总结 招聘.NET高级软件工程师 DataTable.Select方法的性能问题 [转贴]Visual Studio 2005常用插件搜罗
[.net]正则表达式整理
小诈 · 2006-08-01 · via 博客园 - 小诈

正则表达式在处理字符串方面具有强大的优势,所以整理了一下主要的知识点,希望对大家有所帮助。通过这篇文章我们能够理清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