上周,我正在为生成一些SQL语句的代码编写一些Unit测试。
我试图找出一个正则表达式来匹配SELECT、INSERT和UPDATE语法,这样我就可以验证我的方法是否生成了有效的SQL,经过3-4个小时的搜索和处理各种regex编辑器之后,我放弃了。
我设法得到了部分匹配,但是由于引号中的节可以包含任何字符,所以它会迅速展开以匹配整个语句。
任何帮助都会很感激,我不太擅长正则表达式,但我想了解更多关于正则表达式的信息。
顺便说一句,我要找的是C# RegEx。
澄清
我不想访问数据库,因为这是单元测试的一部分,我也不需要维护数据库来测试我的代码。可能比项目的寿命更长。
发布于 2008-09-26 15:04:30
正则表达式只能匹配语言,只有有限的状态自动机才能解析,这是非常有限的,而SQL是语法。可以证明您不能用regex.sql来验证。因此,可以停止尝试。
发布于 2008-09-26 20:42:04
SQL是一个类型-2语法,它太强大了,不能用正则表达式来描述。这就像您决定生成C#代码,然后在不调用编译器的情况下验证它一样。一般来说,数据库引擎过于复杂,不易存根。
尽管如此,你可以试试ANTLR的SQL语法。
发布于 2008-09-26 15:07:47
据我所知,这是超越正则表达式和接近黑暗艺术的BnF和编译器。
http://savage.net.au/SQL/
同样的事情发生在那些想要做正确的语法突出显示的人身上。你开始把东西塞进regex,然后你写了一个编译器.
https://stackoverflow.com/questions/139926
复制相似问题