正则贪婪模式解析

贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。

属于贪婪模式的量词,也叫做匹配优先量词,包括:

{m,n}”、“{m,}”、“?”、“*”和“+”。

在匹配优先量词后加上“?”,即变成属于非贪婪模式的量词,也叫做忽略优先量词,包括:

{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。
 

 

  static void Main(string[] args)
        {
            //默认正则表达式采用贪婪模式,尽可能多的进行匹配
            string str = "啊哈哈hello worldwwwwwwww!嘎嘎!";
            //当正则表达式提取的时候,如果1个字符也能匹配,多个字符也能匹配,这时,会按照使用最多字符的方式来匹配,这个就叫贪婪模式。
            //当终止贪婪模式后会按照最小的方式来匹配。
            string regStr = "[a-zA-Z]+";//贪婪模式
            string regStr1 = "[a-zA-Z]+?";//非贪婪模式
            Match match = Regex.Match(str, regStr);
            Console.WriteLine("========贪婪模式========");
            Console.WriteLine(match.Value);//贪婪模式提取结果:hello
            Console.WriteLine("========非贪婪模式========");
            Match match1 = Regex.Match(str, regStr1);
            Console.WriteLine(match1.Value);//非贪婪模式提取结果:h;使用?来终止贪婪模式(注:在限定符后面使用)

            //======================例子2
            Console.WriteLine("========贪婪模式========");
            string str2 = "1111。1    1。   111。111111。";
            string regStr2 = ".+。";
            Match match2 = Regex.Match(str2, regStr2);
            Console.WriteLine(match2.Value);//结果:1111。1    1。   111。111111。
            Console.WriteLine("========非贪婪模式========");
            string str3 = "1111。1    1。   1。   111。111111。";
            //字符串提取
            string regStr3 = ".+?。";//终止贪婪模式            
            //所以为了匹配句号只能再向后搜索3个1,然后找到句号。所以就是1111。
            Match match3 = Regex.Match(str3, regStr3);
            Console.WriteLine(match3.Value);//结果:1111。,因为.+?表示终结贪婪模式,所以只能提取出来第一个1,但是后面还有个   句号:。 ,
            Console.ReadKey();
        }

 

 

posted @ 2013-12-15 15:15  wbkboy  阅读(502)  评论(0)    收藏  举报