正则表达式匹配常见的SQL语法?

Oma*_*eji 16 regex sql unit-testing

上周我正在为一段生成一些SQL语句的代码编写一些单元测试.

我试图找出一个匹配SELECT,INSERT和UPDATE语法的正则表达式,这样我就可以验证我的方法是否生成了有效的SQL,经过3-4个小时的搜索和乱搞各种正则表达式编辑后,我放弃了.

我设法获得部分匹配,但因为引号中的部分可以包含任何字符,所以它会快速扩展以匹配整个声明.

任何帮助将不胜感激,我对正则表达式不是很好,但我想了解更多关于它们的信息.

顺便说一句,这是我所追求的C#正则表达式.

澄清

我不想要访问数据库,因为这是单元测试的一部分,我不需要维护数据库来测试我的代码.这可能比项目更长寿.

Pab*_*bio 38

正则表达式只能匹配有限状态自动机可以解析的语言,这是非常有限的,而SQL是一种语法.可以证明您无法使用正则表达式验证SQL.所以,你可以停止尝试.

  • 任何上下文无关语法都可以通过现代正则表达式进行解析.正则表达式不再局限于解析常规语言.如果这是真的,那么语言`{a ^ nb ^ n}`将不是可解析的,但是这可以通过正则表达式`/ ^(a(\ 1)?b)$ /`来解析.有关详细信息,请参阅https://nikic.github.io/2012/06/15/The-true-power-of-regular-expressions.html. (2认同)

Con*_*tin 14

SQL是一种类型2语法,它太强大了,不能被正则表达式描述.它就像你决定生成C#代码然后在不调用编译器的情况下验证它一样.数据库引擎通常太复杂而不容易存根.

也就是说,您可以尝试使用ANTLR的SQL语法.