想写一个正则表达式,去验证一个sql脚本文件中的delete 语句中必须有where条件,试写了几个,验证的都不够全面,该如何写呢,哪位高手能帮个忙,不胜感激!例如:select * from test delete from test update table set id =0 where name=123,这条sql语句包含了delete 但是没有where语句!

解决方案 »

  1.   

    string s = "select * from test delete from test update table set id =0 where name=123";
    bool result = Regex.IsMatch(s, @"(?is)delete\s+from\s+\w+\s+where");
    Response.Write(result);
      

  2.   

     string sql = "";
        MatchCollection mc = Regex.Matches(sql, @"(where|and)\s*(?=\S*\s*(?<t>\S+))(?<c>((?!\'t')\S)+)\s*\'t'\s*(?<v>@\S+)");
        foreach (Match m in mc)
        {
            Console.WriteLine("列名:" + m.Groups["c"].Value);
            Console.WriteLine("方式:" + m.Groups["t"].Value);
        }
      

  3.   

    很感谢 dalmeeme
    这个正则表达式好像把update的where条件,当做delete的where条件验证了。要是能在where之前排除select、update和insert就基本上完美了!
      

  4.   

    什么情况下,会把update的where条件当作delete的where?请给个反例出来。
      

  5.   

    很感谢wuyq11
    测试验证不出delte from ...where 语句,找不出来.麻烦能不能再看看。
      

  6.   

    搞错了,不好意思,dalmeeme你太厉害了,排名187,名至实归呀