猿问

正则卡死 问题

private static string clearFulltag(string html)//去除成对标签

        {

            string patt = @"<([a-zA-Z0-9]+)(\s*([a-zA-Z]+)\s*=\s*([""'])[\s\S]*?\4|\s+([a-zA-Z]+)\s*=\s*\S*)*?\s*>([\s\S]*?)</\1\s*>";

            Console.WriteLine(Regex.CacheSize);

            if (Regex.IsMatch(html, patt))

            {

                MatchCollection mc = Regex.Matches(html, patt);

                int count = mc.Count;

                for (int i = 0; i < count; i++)

                {

                    html = html.Replace(mc[i].Value, mc[i].Groups[6].Value);

                }

                html = clearFulltag(html);

            }

            return html;

        }

问题 在进入 13后 递归该函数 执行到 5 的时候卡死 是啥原因??? 调试也不报错 一直卡在那 等了 几个小时 还是没反应! 参数html不大 才 1000多字节

偶然的你
浏览 1052回答 2
2回答

当年话下

可能没替换掉,死循环了。 不过也可以这么写: if&nbsp;(Regex.IsMatch(html,&nbsp;patt)){    return&nbsp;clearFulltag(Regex.Replace(html,patt&nbsp;,"$6"));} return&nbsp;html;

慕慕森

这个方法因该是不对的。html.Replace(mc[i].Value, mc[i].Groups[6].Value);楼主检查下,应该是没替换直接进入死循环里。
随时随地看视频慕课网APP
我要回答