使用“(?>…)”方式进行非回溯声明。由于正则表达式引擎的贪婪特性,导致它在某些情况下,将进行回溯以获得匹配,请看下面的示例: Code 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中,由于强制非回溯,所以整个表达式匹配失败。 转载于:https://www.cnblogs.com/Ken-Cai/archive/2011/03/08/1977289.html