C#正则表达式之回溯与非回溯浅析

    C#正则表达式之回溯与非回溯是什么呢?我们学习这部分需要知道的有哪些东西呢?让我们开始吧:

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

    请看下面的C#正则表达式之回溯与非回溯示例:

    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中,由于强制非回溯,所以整个表达式匹配失败。
    

posted on 2011-05-05 18:28  Daywei  阅读(545)  评论(0)    收藏  举报

导航

技术追求卓越 梦想创造未来