请大家帮我在C#下怎样用正则表达式判断括号匹配是正确的,SELECT *
FROM A_XS_FK
WHERE  ( WFYK = 6)  AND ( GYS = 86   OR
        wFYK  > 0   )我要判断SELECT * FROM A_XS_FK WHERE 以后的括号匹配,( WFYK = 6)  AND ( GYS = 86   OR  wFYK  > 0   )的括号 是对的! ( WFYK = 6  )  )AND ( GYS = 86  OR  wFYK  > 0  的括号 是错的
 
 ( WFYK = 6    AND ( GYS = 86  OR    wFYK  > 0   )这样的也是错的,
当然还有其它错的方式请问大家在C#下怎样用正则表达式判断括号匹配是正确的,因为WHERE 后面是根据输入的条件自动生成的,WHERE后面的条件是不一定有多少个 条件,想请大家帮我在C#下怎样用正则表达式判断括号匹配是正确的!

解决方案 »

  1.   

    ^[^\(\)]*(((?<o>\()[^\(\)]*)*[^\(\)]*((?<-o>\))[^\(\)]*)*)*(?(o)(?!))$
      

  2.   

    写错了,改一下:
    ^[^\(\)]*(((?<o>\()[^\(\)]*)+[^\(\)]*((?<-o>\))[^\(\)]*)+)*(?(o)(?!))$
      

  3.   

    完整的
                string sql = @"SELECT * FROM A_XS_FK WHERE  ( WFYK = ')6')  AND ( GYS = 8)6  OR    wFYK  > 0  )";            Regex res = new Regex(@"\'.*\'");
                Regex rem = new Regex(@"\([^()]*?\)");
                Regex ren = new Regex(@"[()]");
                string sqlnr = res.Replace(sql,"''");//把内容包含‘)’‘(’的替换成空字符串
                string sqla = rem.Replace(sqlnr, string.Empty);//去掉完整的成对括号
                if (ren.IsMatch(sqla))//判断是否还存在符号
                {
                    Console.WriteLine("SQL语句中括号匹配不正确!");
                }
                else
                {
                    Console.WriteLine("SQL语句中括号匹配正确。");
                }
      

  4.   

    去掉注释很麻烦,可以看一下这里用C#去掉SQL语句中的注释如果没有注释,可以先去掉'8887765)jhksuif'中的")"和"(",再判断
      

  5.   

    谢谢大家,我试用了 C# code    string sql = @"SELECT * FROM A_XS_FK WHERE ( WFYK = 6) AND ( GYS = 8)6 OR wFYK > 0 )"; Regex rem = new Regex(@"\([^()]*?\)"); Regex ren = new Regex(@"[()]"); while (rem.IsMatch(sql)) sql = rem.Replace(sql, string.Empty); if (ren.IsMatch(sql)) { Console.WriteLine("SQL语句中括号匹配不正确!"); } else { Console.WriteLine("SQL语句中括号匹配正确。"); }
    和C# code    ^[^\(\)]*(((?<o>\()[^\(\)]*)+[^\(\)]*((?<-o>\))[^\(\)]*)+)*(?(o)(?!))$都是好用的,谢谢,辛苦大家