当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《正则表达式匹配常见的SQL语法?》经验,为你挑选了2个好方法。

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

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

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

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

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

澄清

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



1> Pablo Maramb..:

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


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

2> Constantin..:

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

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

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有