在c#中使用正则表达式进行匹配,有时候我们会遇到这种情况,cpu使用率100%,
但是正则表达式并没有异常抛出,正则一直处于匹配过程中,这将导致系统资源被耗尽,
应用程序被卡住,这是由于正则不完全匹配,而且Regex中没有Timeout属性,使正则处
理器陷入了死循环。
public static Match GetMatchRigid(string input, string pattern, string find)
{
string _pattn = Regex.Escape(pattern);
_pattn = _pattn.Replace(@"\[变量]", @"[\s\S]*?");
if (Regex.Match(pattern.TrimEnd(), Regex.Escape(find) + "$", RegexOptions.Compiled).Success)
_pattn = _pattn.Replace(@"\" + find, @"(? <TARGET>[\s\S]+)");
else
_pattn = _pattn.Replace(@"\" + find, @"(? <TARGET>[\s\S]+?)");
Regex r = new Regex(_pattn, RegexOptions.IgnoreCase | RegexOptions.Compiled);
Match m = r.Match(input);
return m;
}
倚天杖
MMTTMM