0

请考虑这个字符串:

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";

是否有任何正则表达式可以在每个结果中返回带有这三个 Select 的 MatchCollection?

提前致谢!

4

2 回答 2

2

没有这样的正则表达式,也不可能写一个:正则表达式编程模型不够强大,无法处理计数。即使平衡表达式中的括号也不够强大 -select在您的示例中捕获第三个所需的东西。.NET 的正则表达式引擎支持平衡组这一事实不会对您有太大帮助:正则表达式对于手头的任务是完全不合适的。

你需要比正则表达式更强大的东西——最好是一个完整的SQL 解析器。我已经尝试过这个解析器(需要注册),它在许多查询上都运行良好。如果您希望根据需要对其进行调整,它也有一个来源。

于 2013-10-29T15:32:04.707 回答
1

空无一人。

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

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

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

于 2013-10-29T15:32:58.913 回答