【发布时间】:2012-12-20 09:32:15
【问题描述】:
我需要为 C# 构建一个正则表达式,以便捕获 select 子句中 'from' 关键字之后的所有表名。例如
.
.
.
SELECT field1, field2
FROM table1
WHERE condition1
.
.
.
SELECT field3, field4
FROM table2
WHERE condition2
.
.
.
我尝试读取的文件中有多个 select 子句,并且 select 和 from 之间可以有任何字符(包括换行符、':'、'_' 和任何其他字符)。 我应该如何构造我的正则表达式以获取所有表名?
谢谢
编辑: 我找到了一种获取所有表名的方法。
\s*SELECT[^;]*FROM\s*(?<key>[^\n]*)
这可能会在某一天对某人有所帮助。 谢谢
【问题讨论】:
-
当我尝试
SELECT[\D|\d]*FROM (?<key>[^ \n]*)时,它会找到一个从第一个选择开始一直到最后一个选择的匹配项。相反,我希望它匹配所有选择并返回它们的所有表名。 -
试试这个网站,在找出 RegExes 时总是能帮助我regexpal.com
-
@Charleh 用于 Javascript 正则表达式。对于 .NET,您应该使用 RegexHero
-
你不应该尝试,因为这太复杂了。派生表、CTE、EXISTS 子句、CROSS APPLY 等等呢?提交估计执行计划的查询并挖掘结果数据。
-
@ErikE 你能举个简单的例子吗?