在正则匹配里像.*?或.+?这种匹配代表啥意思

最近在读一些模板引擎的源代码,发现很多里面都用了这种匹配,.*或者.+我清楚意思,就是匹配任意长度的任意字符,那后面加个问号是什么意思呢?

为了便于我等菜鸟理解,最好能举例说明一下,非常感谢。

阅读 28.7k
3 个回答

贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配

string pattern1 = @"a.*c";   // greedy match 
Regex regex = new Regex(pattern1);
regex.Match("abcabc"); // return "abcabc"

非贪婪匹配:在满足匹配时,匹配尽可能短的字符串,使用?来表示非贪婪匹配

string pattern1 = @"a.*?c";   // non-greedy match 
Regex regex = new Regex(pattern1);
regex.Match("abcabc"); // return "abc"

几个常用的非贪婪匹配Pattern

*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复

非贪婪匹配

希望这个图对你有帮助
正则基础语法

宣传栏