SELECT FieldList FROM TableName WHERE ConditionList
根据上述语句获取FieldList,TableName,ConditionList,注:SELECT,FROM,WHERE不区分大小写,即: 解析出Select语句的字段列表,表名称,检索数据条件

解决方案 »

  1.   

    string strSql="SELECT FieldList FROM TableName WHERE ConditionList";
    egex reg=new Regex(@"select\s+(?<select>\S.+\S)\s+from\s+(?<from>\S.+\S)\s+where\s+(?<where>\S.+\S)",RegexOptions.IgnoreCase);
    Match m=reg.Match(strSql);
    string strSelect=m.Groups["select"].Value;
    string strFrom=m.Groups["from"].Value;
    string strWhere=m.Groups["where"].Value;
      

  2.   

    测试没问题立即结帖,主要select 、from、where不区分大小写哟
      

  3.   

    RegexOptions.IgnoreCase .........
      

  4.   

    to cancerser(都是混饭吃,记得要结帖) :非常感谢,但忘记讲了,要考虑子查询,如:
    SELECT 字段列表1 FROM 
    AA,
    (SELECT 字段列表2 FROM BB WHERE 条件) BB
    WHERE
    AA.A=BB.B
    要求能分析出:
    "段列表1"
    "A,
    (SELECT 字段列表2 FROM BB WHERE 条件) BB"
    "AA.A=BB.B"
    很久没有上网,测试没问题立即结贴,谢谢!
      

  5.   

    trystring yourStr = ..............;
    string select = string .Empty;
    string from = string .Empty;
    string where = string .Empty ;
    Match m = Regex.Match(yourStr, @"select\s+(?<select>[\s\S]*?)\s+from\s+(?<from>([^()]*?(\([^()]*\))*[^()]*?)+)\s+where\s+(?<where>[\s\S]*)$", RegexOptions.IgnoreCase);
    if (m.Success)
    {
        select = m.Groups["select"].Value;
        from = m.Groups["from"].Value;
        where = m.Groups["where"].Value;
    }其实这个写的也不严谨,因为这样的需求需要考虑的情况太多,很难做到严谨,只能是有什么样的要求,就给什么样的正则了
      

  6.   

    用try,catch合适。try以下。不对了再说。
      

  7.   

    测试代码            string test = @"SELECT 字段列表1 FROM 
    AA,
    (SELECT 字段列表2 FROM BB WHERE 条件) BB
    WHERE
    AA.A=BB.B";            string select = string.Empty;
                string from = string.Empty;
                string where = string.Empty;
                Match m = Regex.Match(test, @"select\s+(?<select>[\s\S]*?)\s+from\s+(?<from>([^()]*?(\([^()]*\))*[^()]*?)+)\s+where\s+(?<where>[\s\S]*)$", RegexOptions.IgnoreCase);
                if (m.Success)
                {
                    select = m.Groups["select"].Value;
                    from = m.Groups["from"].Value;
                    where = m.Groups["where"].Value;
                }            richTextBox2.Text += select + "\n\n";
                richTextBox2.Text += from + "\n\n";
                richTextBox2.Text += where + "\n\n";输出:字段列表1AA,
    (SELECT 字段列表2 FROM BB WHERE 条件) BBAA.A=BB.B难道不符合你的要求吗?
      

  8.   

    to lxcnn:我测试过了,希望既能解析简单的SELECT * FROM TABLENAME又能解析带子查询的SELECT语句,非常感谢你的帮助,这个正则能否实现?请多多帮助,先谢谢了!