使用Regex从包含SQL查询的文件中提取表名

时间:2010-11-18 11:02:18

标签: c# regex

我有一个包含大量查询的文本文件。我想在所有查询中获取整个文件中使用的所有不同表。表名可以在'from'或'join'之后。如何通过正则表达式匹配来提取它们。任何人都可以建议使用正则表达式来获得比赛吗?

4 个答案:

答案 0 :(得分:5)

这取决于您的文件结构。试着用这个:

(?<=from|join)(\s+\w+\b)

如果您不将文件拆分为数组,或者使用单行字符串成员,则打开选项Multiline。 还要尝试打开IgnorCase选项。

答案 1 :(得分:4)

我会用:

r = new Regex("(from|join)\s+(?<table>\S+)", RegexOptions.IgnoreCase);

一旦你有匹配对象“m”,你将拥有

的表名
m.Groups["table"].Value

示例:

string line = @"select * from tb_name join tb_name2 ON a=b WHERE x=y";
Regex r = new Regex(@"(from|join)\s+(?<table>\S+)",
         RegexOptions.IgnoreCase|RegexOptions.Compiled);

Match m = r.Match(line);
while (m.Success) {
   Console.WriteLine (m.Groups["table"].Value);
   m = m.NextMatch();
}

它将打印: tb_table tb_table2

答案 2 :(得分:1)

这样的事情可能是:

/(from|join)\s+(\w*\.)*(?<tablename>\w+)/

虽然它不会与转义的表名匹配,但您需要使正则表达式评估不区分大小写。

答案 3 :(得分:-1)

(from|join)\s(\w+)