本帖最后由 wcg83 于 2010-12-12 21:54:31 编辑

解决方案 »

  1.   


    只是在你的正则基础上稍加改动,就可以满足你的需求
    string pattern6 = @"<([a-z]+)(?:(?!\bid\b)_)*id\s*=\s*([""']?)test\2_*>(?:(?>(?<o>)<\1_*>|(?<-o>)</\1>|(?!</?\1)(?:""[^""]*""|'[^']*'|[^""']))*(?(o)(?!))</\1>)?";
    pattern6 = pattern6.Replace("_", @"(?:""[^""]*""|'[^']*'|[^""'<>])");不过话说回来,写出来又如何?
    用正则来解决这类问题,不要去追求什么完美,上面的正则就算满足了你的需求,还是可以构造出不满足需求的源字符串的,继续优化吗?
    事实上,那已经不是在优化或完善了,而是在不断的增加复杂度,增加判断,增加回溯,甚至某些情况下,可以构造出相应的数据源,直接让你的程序崩溃正则的原则,只写合适的,不写完美的
    你确认你要处理的字符串真的有这么多种情况吗?如果真的有,那你就要考虑,正则用在这里是不是适合了
      

  2.   

    非常感谢,我是想做个在线编辑器,所以无法知道要处理的字符串会有什么情况发生,所以希望做得完美。当然,谢谢您的提醒,我现在也得反思一下,好像用正则在这里好像并不太合适!对了,还想请教一个问题,
    HTML的标签修复闭合,这个功能,你们以前实现的思路是什么?能提供一些参考代码吗?