在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; }
- 2 回答
- 0 关注
- 359 浏览
添加回答
举报
0/150
提交
取消