上周我正在为一段生成一些SQL语句的代码编写一些单元测试.
我试图找出一个匹配SELECT,INSERT和UPDATE语法的正则表达式,这样我就可以验证我的方法是否生成了有效的SQL,经过3-4个小时的搜索和乱搞各种正则表达式编辑后,我放弃了.
我设法获得部分匹配,但因为引号中的部分可以包含任何字符,所以它会快速扩展以匹配整个声明.
任何帮助将不胜感激,我对正则表达式不是很好,但我想了解更多关于它们的信息.
顺便说一句,这是我所追求的C#正则表达式.
澄清
我不想要访问数据库,因为这是单元测试的一部分,我不需要维护数据库来测试我的代码.这可能比项目更长寿.
正则表达式只能匹配有限状态自动机可以解析的语言,这是非常有限的,而SQL是一种语法.可以证明您无法使用正则表达式验证SQL.所以,你可以停止尝试.
SQL是一种类型2语法,它太强大了,不能被正则表达式描述.它就像你决定生成C#代码然后在不调用编译器的情况下验证它一样.数据库引擎通常太复杂而不容易存根.
也就是说,您可以尝试使用ANTLR的SQL语法.