为了账号安全,请及时绑定邮箱和手机立即绑定

难题高分求解:正则式匹配无异常但是资源耗尽

难题高分求解:正则式匹配无异常但是资源耗尽

POPMUISE 2018-11-01 01:03:21
在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 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

没遇到过,难道是传说中的回溯,帮不了你,顶你一下

查看完整回答
反对 回复 2018-11-05
?
MMTTMM

TA贡献1869条经验 获得超4个赞

最好把样本和设想结果也发出来供测试啊。

一般来说产生这种情况都是回溯所致,尝试将[\s\S]+一类的表达式都用(?>   )装起来,即(?>[\s\S]+),RegexOptions中可以增加一个仅捕获命名组的选项。


查看完整回答
反对 回复 2018-11-05
  • 2 回答
  • 0 关注
  • 359 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信