C# Extract SQL使用C中的正则表达式选择查询# 请考虑此字符串: string mySelects = @"SELECT * FROM TABLE1 WHERE 1=1 SELECT T.* FROM (SELECT * FROM TABLE2 WHERE 2=2) T ORDER BY FOO SELECT FIELD1, FIELD3 FROM TABLE3 GROUP BY FIELD";

C# Extract SQL使用C中的正则表达式选择查询# 请考虑此字符串: string mySelects = @"SELECT * FROM TABLE1 WHERE 1=1 SELECT T.* FROM (SELECT * FROM TABLE2 WHERE 2=2) T ORDER BY FOO SELECT FIELD1, FIELD3 FROM TABLE3 GROUP BY FIELD";,c#,regex,C#,Regex,是否有任何正则表达式在每个结果中返回包含这三个选择的MatchCollection 提前谢谢 没有这样的正则表达式,也不可能编写一个:正则表达式编程模型的功能不足以处理计数。它的功能甚至不足以平衡表达式中的括号,这是捕获示例中第三个select所需的功能。NET的regex引擎支持平衡组这一事实对您没有多大帮助:regex无法胜任手头的任务 你需要比正则表达式更强大的东西——最好是一个完整的正则表达式。我已经尝试过了,它在很多查询中都很有效。它还有一个源代码,以备您根据需要进行调整。没有类似的正

是否有任何正则表达式在每个结果中返回包含这三个选择的MatchCollection


提前谢谢

没有这样的正则表达式,也不可能编写一个:正则表达式编程模型的功能不足以处理计数。它的功能甚至不足以平衡表达式中的括号,这是捕获示例中第三个
select
所需的功能。NET的regex引擎支持平衡组这一事实对您没有多大帮助:regex无法胜任手头的任务


你需要比正则表达式更强大的东西——最好是一个完整的正则表达式。我已经尝试过了,它在很多查询中都很有效。它还有一个源代码,以备您根据需要进行调整。

没有类似的正则表达式,也不可能编写一个:正则表达式编程模型的功能不足以处理计数。它的功能甚至不足以平衡表达式中的括号,这是捕获示例中第三个
select
所需的功能。NET的regex引擎支持平衡组这一事实对您没有多大帮助:regex无法胜任手头的任务

你需要比正则表达式更强大的东西——最好是一个完整的正则表达式。我已经尝试过了,它在很多查询中都很有效。它也有一个来源,以备您根据需要调整它。

没有

从数学上讲,正则表达式描述了一组字符串(这些字符串与正则表达式匹配)。类似地,语法描述一组字符串(与此语法匹配)。但是语法是正则表达式的超集,因为每个正则表达式都可以用语法来描述,但不幸的是,不是相反

SQL是一种语言,由一些语法描述。但这种语法太复杂了,无法用正则表达式来描述。你需要更多的数学能力来处理这门语言

解决方案是寻找一个现成的SQL解析器,或者使用工具编写一个。

没有

从数学上讲,正则表达式描述了一组字符串(这些字符串与正则表达式匹配)。类似地,语法描述一组字符串(与此语法匹配)。但是语法是正则表达式的超集,因为每个正则表达式都可以用语法来描述,但不幸的是,不是相反

SQL是一种语言,由一些语法描述。但这种语法太复杂了,无法用正则表达式来描述。你需要更多的数学能力来处理这门语言


解决方案是寻找一个现成的SQL解析器,或者使用类似的工具编写一个。

对于此类分析,您最好使用SQL解析器。。。正则表达式不是合适的工具…正则表达式很适合在没有上下文的情况下解析语言,sql则更复杂。您将无法找到在所有情况下都能提供良好结果的正则表达式。我认为这可能非常简单:在另一个“Select”或字符串结尾之前为我提供所有“Select.*”表达式,忽略括号之间的“Select.*”。有什么帮助吗?对于这种分析,您最好使用SQL解析器。。。正则表达式不是合适的工具…正则表达式很适合在没有上下文的情况下解析语言,sql则更复杂。您将无法找到在所有情况下都能提供良好结果的正则表达式。我认为这可能非常简单:在另一个“Select”或字符串结尾之前为我提供所有“Select.*”表达式,忽略括号之间的“Select.*”。有什么帮助吗?@dasblinkenlight你说的“怨恨投票”是什么意思?@dasblinkenlight我明白了。运气不好:)-1有几个原因。首先,因为“语法是正则表达式的超集”是一个毫无意义的语句。形式语法描述一种形式语言。这种语言可以是。此外,没有一种现代正则方言是真正正规的。C#正则表达式当然不是常规的。请注意,这并不是对使用正则表达式进行此项工作的认可,如果您从零开始,它们不是一个很好的工具(尽管您应该记住ANTLR的lexer使用正则表达式)。我只是指出,答案包含技术上不准确的陈述。如果你解决了这些问题,我将删除downvote(cc@dasblinkenlight)@NullUserException我重新措辞了答案,使之更清楚。总的来说,没有一个正则表达式引擎(即使有一些扩展)强大到足以处理SQL语法。请注意,即使在前面我也注意到,有正则语法(这些语法与正则表达式匹配)。顺便说一句,请考虑在将来为下注写评论——如果有一些不确定性,我们将能够更快地解决我们的答案。@达斯布林克赖特:“恶意投票”是什么意思?运气不好:)-1有几个原因。首先,因为“语法是正则表达式的超集”是一个毫无意义的语句。形式语法描述一种形式语言。这种语言可以是。此外,没有一种现代正则方言是真正正规的。C#正则表达式当然不是常规的。请注意,这并不是对使用正则表达式进行此项工作的认可,如果您从零开始,它们不是一个很好的工具(尽管您应该记住ANTLR的lexer使用正则表达式)。我只是指出,答案包含技术上不准确的陈述。如果你解决了这些问题,我将删除downvote(cc@dasblinkenlight)@NullUserException我重新措辞了答案,使之更清楚。总的来说,没有一个正则表达式引擎(即使有一些扩展)强大到足以处理SQL语法。请注意,即使在前面我也注意到,有正则语法(这些语法与正则表达式匹配)。顺便说一下,请考虑在将来为下注写评论——如果有一些不确定性,我们将能够修复我们的ANSWE。