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

正则卡死 问题

正则卡死 问题

偶然的你 2018-11-14 23:12:31
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多字节
查看完整描述

2 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

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


查看完整回答
反对 回复 2018-11-18
?
慕慕森

TA贡献1856条经验 获得超17个赞

这个方法因该是不对的。

html.Replace(mc[i].Value, mc[i].Groups[6].Value);楼主检查下,应该是没替换直接进入死循环里。


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

添加回答

举报

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