class\\s*=\\s*(?<tag1>\"?)(?<content>(\\s*\\w+)*)\\s*EditBoder\\k<tag1>具体在下面的语句中,我 看好像是去掉 EditBoder的,可是当字符串中没有Editborder的时候, 程序几乎停了下来。
要四五分钟才走过去,为什么呀
 Regex regex = new Regex("class\\s*=\\s*(?<tag1>\"?)(?<content>(\\s*\\w+)*)\\s*EditBoder\\k<tag1>",
            RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase | RegexOptions.Singleline);
        currentSetting = regex.Replace(currentSetting, "class=${tag1}${content}${tag1}");

解决方案 »

  1.   

    典型的滥用正则,尤其是在RegexOptions的使用上,写这个正则的人根本就不懂每个Option的意义,否则也不会这么用了、
    还有这个正则本身就是矛盾的,前边声明引号可有可无,但如果没有引号,中间居然又允许有空格,根本就没法判别class标签到哪里结束
    程序几乎停下来是滥用非贪婪模式,多重循环尝试匹配,从而导致效率陷阱
    这种正则不用也罢,先用下面的试下,如果不满足,楼主说下你的需求,重写一个吧currentSetting = Regex.Replace(currentSetting, @"(?<=class\s*=\s*([""'])[^""']*?)EditBoder(?=[^'""]*\1)", "", RegexOptions.IgnoreCase);
      

  2.   

    谢谢 root_这是我们公司以前的人写的,
    是一个模板替换模块中的,
    最近,对有些模板,替换的时候非常慢,
    于是让我找原因。