正则贪婪模式解析
贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。
属于贪婪模式的量词,也叫做匹配优先量词,包括:
“{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(); }

浙公网安备 33010602011771号