求正则表达式!
SELECT FieldList FROM TableName WHERE ConditionList
根据上述语句获取FieldList,TableName,ConditionList,注:SELECT,FROM,WHERE不区分大小写,即: 解析出Select语句的字段列表,表名称,检索数据条件
------解决方案--------------------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;
------解决方案--------------------try
string 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;
}
其实这个写的也不严谨,因为这样的需求需要考虑的情况太多,很难做到严谨,只能是有什么样的要求,就给什么样的正则了
------解决方案--------------------用try,catch合适。try以下。不对了再说。
------解决方案--------------------测试代码
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 ";
输出:
字段列表1
AA,
(SELECT 字段列表2 FROM BB WHERE 条件) BB
AA.A=BB.B
难道不符合你的要求吗?