我有一个包含大量查询的文本文件.我想在所有查询中获取整个文件中使用的所有不同表.表名可以在'from'或'join'之后.如何通过正则表达式匹配来提取它们.任何人都可以建议正则表达式来获得比赛吗?
我会用:
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
这取决于您的文件的结构.试着用这个:
(?<=from|join)(\s+\w+\b)
Run Code Online (Sandbox Code Playgroud)
如果不将文件拆分为数组,或者使用单行字符串成员分割文件,也可以打开选项Multiline.还尝试打开IgnorCase选项.