[英]How to select column names and tables of an SQL using regex?
I have an SQL string that looks something like this: 我有一个看起来像这样的SQL字符串:
SELECT
USER."ID", USER."NAME", USER."BIRTH",USER."GENDER",
PACKAGE."type"
PACKAGE."code"
FROM
"DBNAME"."USER" USER,
"DBNAME2"."PACKAGE" PACKAGE
WHERE
USER."PACKAGE_ID" = PACKAGE."ID"
ORDER BY
USER."NAME";
How should I write my regular expression in C# to extract all the column names between the SELECT and FROM keywords, and then the table names in the FROM clause? 我应该如何在C#中编写正则表达式以提取SELECT和FROM关键字之间的所有列名称,然后提取FROM子句中的表名称?
The expected output should find these so that I can put them into List
to loop through: 预期的输出应该找到这些,以便我可以将它们放入
List
以遍历:
ColumnsList: ColumnsList:
USER."ID"
USER."NAME"
USER."BIRTH"
USER."GENDER"
PACKAGE."type"
PACKAGE."code"
TablesList: TablesList:
"DBNAME"."USER" USER
"DBNAME2"."PACKAGE" PACKAGE
Use this Regex will get the column and table name: 使用此正则表达式将获取列和表的名称:
(?is)SELECT(.*?)(?<!\w*")FROM(?!\w*?")(.*?)(?=WHERE|ORDER|$)
Code Samples: 代码样例:
string sql=@"SELECT
USER.""ID"", USER.""NAME"", USER.""BIRTH"",USER.""GENDER"",
PACKAGE.""type""
PACKAGE.""code""
FROM
""DBNAME"".""USER"" USER,
""DBNAME2"".""PACKAGE"" PACKAGE
WHERE
USER.""PACKAGE_ID"" = PACKAGE.""ID""
ORDER BY
USER.""NAME"";";
var reg=new Regex(@"(?is)SELECT(.*?)(?<!\w*"")FROM(?!\w*?"")(.*?)(?=WHERE|ORDER|$)");
var colunms=reg.Match(sql).Groups[1].Value.Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries);
var tables=reg.Match(sql).Groups[2].Value.Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.