C#正则表达式引擎贪婪特性
C#正则表达式引擎贪婪特性,只要模式允许,它将匹配尽可能多的字符。通过在“重复描述字符”(*,+)后面添加“?”,可以将匹配模式改成非贪婪。请看以下示例:

巩留网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联公司公司2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司。
- Code
- string x = "Live for nothing,die for something";
- Regex r1 = new Regex(@".*thing");
- if (r1.IsMatch(x))
- {
- Console.WriteLine("match:" + r1.Match(x).Value);
- //输出:Live for nothing,die for something
- }
- Regex r2 = new Regex(@".*?thing");
- if (r2.IsMatch(x))
- {
- Console.WriteLine("match:" + r2.Match(x).Value);
- //输出:Live for nothing
- }
使用“(?>…)”方式进行非回溯声明。由于C#正则表达式引擎的贪婪特性,导致它在某些情况下,将进行回溯以获得匹配,请看下面的示例:
- Code
- string x = "Live for nothing,die for something";
- Regex r1 = new Regex(@".*thing,");
- if (r1.IsMatch(x))
- {
- Console.WriteLine("match:" + r1.Match(x).Value);
- //输出:Live for nothing,
- }
- Regex r2 = new Regex(@"(?>.*)thing,");
- if (r2.IsMatch(x))//不匹配
- {
- Console.WriteLine("match:" + r2.Match(x).Value);
- }
在r1中,“.*”由于其贪婪特性,将一直匹配到字符串的***,随后匹配“thing”,但在匹配“,”时失败,此时引擎将回溯,并在“thing,”处匹配成功。
在r2中,由于强制非回溯,所以整个表达式匹配失败。以上介绍C#正则表达式引擎的贪婪特性。
【编辑推荐】
- C#结构体的特点浅析
- 介绍C#窗体拖动事件
- C#读取Excel遇到无法读取的解决方法
- 概述C#.NET操作XML
- C#基础概念学习笔记
网页名称:C#正则表达式引擎贪婪特性
URL分享:http://www.jxjierui.cn/article/djdissg.html


咨询
建站咨询
