解决方案 »

  1.   


    var reg=new Regex(@"^(\w+==\w+\s*(&&|\|\|)\s*)*\(((?<o>\()|(?<-o>)\)|[^()]+)*(?(o)(?!))\)(\s*(&&|\|\|)\s*\w+==\w+)*$");
    return reg.IsMatch("1==1 && 2==2 || 3==3 && ( 4==4 || 5==5 && ( 6==6 || 7==7 ) ) && 8==8");
      

  2.   


    var reg=new Regex(@"^(\w+==\w+\s*(&&|\|\|)\s*)*\(((?<o>\()|(?<-o>)\)|[^()]+)*(?(o)(?!))\)(\s*(&&|\|\|)\s*\w+==\w+)*$");
    return reg.IsMatch("1==1 && 2==2 || 3==3 && ( 4==4 || 5==5 && ( 6==6 || 7==7 ) ) && 8==8");
    感谢大版主的恩赐
      

  3.   

    1.             1==2返回什么?
    2.            1==1 && 2==2 || 3==3 && ( 4==4 || 5==5 && ( 6==6 || 7==7 ) ) && 8==8&& ( 4==4 || 5==5 && ( 6==6 || 7==7 ) ) 
    返回什么?
      

  4.   

    对于命名捕获组,可以在后面反向引用。比如说 1==1 && 2==2 第一个1是命名的组, 可以在第二个1用前面的命名组来捕获
      

  5.   

    给你一个最基本的例子\b(?<Word>\w+)\b\s+\k<Word>\b