C#正则表达式引擎贪婪特性

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

巩留网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联公司公司2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司

 
 
 
  1. Code  
  2. string x = "Live for nothing,die for something";  
  3. Regex r1 = new Regex(@".*thing");  
  4. if (r1.IsMatch(x))  
  5. {  
  6. Console.WriteLine("match:" + r1.Match(x).Value);  
  7. //输出:Live for nothing,die for something  
  8. }  
  9. Regex r2 = new Regex(@".*?thing");  
  10. if (r2.IsMatch(x))  
  11. {  
  12. Console.WriteLine("match:" + r2.Match(x).Value);  
  13. //输出:Live for nothing  

使用“(?>…)”方式进行非回溯声明。由于C#正则表达式引擎的贪婪特性,导致它在某些情况下,将进行回溯以获得匹配,请看下面的示例:

 
 
 
  1. Code  
  2. string x = "Live for nothing,die for something";  
  3. Regex r1 = new Regex(@".*thing,");  
  4. if (r1.IsMatch(x))  
  5. {  
  6. Console.WriteLine("match:" + r1.Match(x).Value);  
  7. //输出:Live for nothing,  
  8. }  
  9. Regex r2 = new Regex(@"(?>.*)thing,");  
  10. if (r2.IsMatch(x))//不匹配  
  11. {  
  12. Console.WriteLine("match:" + r2.Match(x).Value);  

在r1中,“.*”由于其贪婪特性,将一直匹配到字符串的***,随后匹配“thing”,但在匹配“,”时失败,此时引擎将回溯,并在“thing,”处匹配成功。
在r2中,由于强制非回溯,所以整个表达式匹配失败。以上介绍C#正则表达式引擎的贪婪特性。

【编辑推荐】

  1. C#结构体的特点浅析
  2. 介绍C#窗体拖动事件
  3. C#读取Excel遇到无法读取的解决方法
  4. 概述C#.NET操作XML
  5. C#基础概念学习笔记

当前题目:C#正则表达式引擎贪婪特性
本文路径:http://www.shufengxianlan.com/qtweb/news17/299467.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联