正则表达式从SQL查询中提取列定义

时间:2012-04-18 15:34:51

标签: c# regex

考虑以下问题:

select
    foo,
    bar,
    yourmom
from
    theTable

select top 10 *
from
    theTable

select distinct foo, bar + 1, yourmom from theTable

我想要一个提取的正则表达式查询:

foo,
bar,
yourmom

*

foo, bar + 1, yourmom

分别

我尝试了^\sselect\s(distinct\s)?(top\s\d*)?(?'columns'.*\s)from[\s.]*$,我认为这会有效,但事实并非如此。我已经玩了一段时间了,我还是无法让它在所有三个测试用例中都能运行。有人可以用他们的正则表达式来帮助我吗?

2 个答案:

答案 0 :(得分:3)

编辑:首先你需要匹配包括换行符在内的每个字符。在java中你可以设置DOTALL标志,但是在C#中我相信你应该使用RegexOptions.SingleLine选项。

然后这个表达式应该起作用:

^\s*select\s+(?:distinct\s+)?(?:top\s+\d*\s+)?(?'columns'.*?)from.*$

答案 1 :(得分:1)

我认为为SQL查询编写一个“正确的”解析器实际上会更容易(检查Irony:它很棒,并且附带一个SQL示例)而不是使用正则表达式。