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

在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; 
        } 

POPMUISE
浏览 360回答 2
2回答

倚天杖

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

MMTTMM

最好把样本和设想结果也发出来供测试啊。一般来说产生这种情况都是回溯所致,尝试将[\s\S]+一类的表达式都用(?>&nbsp;&nbsp; )装起来,即(?>[\s\S]+),RegexOptions中可以增加一个仅捕获命名组的选项。
打开App,查看更多内容
随时随地看视频慕课网APP