考虑以下问题:
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.]*$
,我认为这会有效,但事实并非如此。我已经玩了一段时间了,我还是无法让它在所有三个测试用例中都能运行。有人可以用他们的正则表达式来帮助我吗?
答案 0 :(得分:3)
编辑:首先你需要匹配包括换行符在内的每个字符。在java中你可以设置DOTALL标志,但是在C#中我相信你应该使用RegexOptions.SingleLine
选项。
然后这个表达式应该起作用:
^\s*select\s+(?:distinct\s+)?(?:top\s+\d*\s+)?(?'columns'.*?)from.*$
答案 1 :(得分:1)
我认为为SQL查询编写一个“正确的”解析器实际上会更容易(检查Irony:它很棒,并且附带一个SQL示例)而不是使用正则表达式。