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

C# 从SQL查询中提取列定义的正则表达式,c#,regex,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 分别 我尝试了从[\s.]*$中选择\s(不同的\s)?(顶部\s\

考虑以下问题:

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
分别


我尝试了从[\s.]*$中选择\s(不同的\s)?(顶部\s\d*)?(?'columns.*\s),我认为这会起作用,但没有。我已经玩了一段时间了,但我仍然无法让它在所有三个测试用例中都工作。有人能帮我学习他们的正则表达式吗?

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

那么这个表达式应该起作用:

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

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

那么这个表达式应该起作用:

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

我认为为SQL查询编写一个“适当”的解析器(检查:它很棒,附带一个SQL示例)实际上比使用正则表达式更容易。

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

这与测试用例不匹配。确定。我修正了它并更新了答案。这次我验证了!这与测试用例不匹配。确定。我修正了它并更新了答案。这次我验证了!“更容易”是一个相对的术语。列列表相当规则;我不需要其他东西,当然也不需要一个全新的库来学习。我认为反讽很容易学习,它将提供正则表达式在这种情况下无法提供的灵活性。当然,这是你的选择……当我有时间研究反讽时,我会的,但现在最简单的答案是barsju提供的。“更容易”是一个相对的术语。列列表相当规则;我不需要其他东西,当然也不需要一个全新的库来学习。我认为反讽很容易学习,它将提供正则表达式在这种情况下无法提供的灵活性。那么,当然,这是你的选择……当我有时间研究反讽时,我会的,但现在最简单的答案是barsju提供的。