首页 新闻 会员 周边 捐助

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

0
悬赏园豆:20 [已关闭问题]

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


在c#中使用正则表达式进行匹配,有时候我们会遇到这种情况,cpu使用率100%,
但是正则表达式并没有异常抛出,正则一直处于匹配过程中,这将导致系统资源被耗尽,
应用程序被卡住,这是由于正则不完全匹配,而且Regex中没有Timeout属性,使正则处
理器陷入了死循环。

        /// <summary>
        /// 按严格的匹配方式获取一个目标的匹配结果
        /// </summary>
        /// <param name="input"> </param>
        /// <param name="pattern"> </param>
        /// <param name="find"> </param>
        /// <returns> </returns>
        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;
        }

象上面的程序经常会发生r.Match(input)配对时卡住,也没有异常,但是CPU跑到了100%,不知这种问题如何
避免呢? 头疼。。。

aploo.com的主页 aploo.com | 初学一级 | 园豆:141
提问于:2009-06-24 12:07
< >
分享
其他回答(1)
0

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

後生哥哥 | 园豆:23 (初学一级) | 2009-06-24 15:55
0

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

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

斯克迪亚 | 园豆:4124 (老鸟四级) | 2009-06-25 00:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册