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

NLV*_*NLV 5 c# regex

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

Sim*_*one 6

我会用:

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

一旦你有了匹配对象“m”,你就会有表名

m.Groups["table"].Value
Run Code Online (Sandbox Code Playgroud)

例子:

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();
}
Run Code Online (Sandbox Code Playgroud)

它将打印: tb_table tb_table2


are*_*-ru 5

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

(?<=from|join)(\s+\w+\b)
Run Code Online (Sandbox Code Playgroud)

如果不将文件拆分为数组,或者使用单行字符串成员分割文件,也可以打开选项Multiline.还尝试打开IgnorCase选项.

  • @El Ronnoco我已经要求使用正则表达式的解决方案,因此他提供了它.我只想要一个快速而肮脏的解决方案,我得到了它. (2认同)