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