我试图使用RegEx来部分验证Oracle SQL,但recently rediscovered a question about parsing HTML让我怀疑我的选择。
我创造了以下蜇伤(在SO及其同事的帮助下):
// C# code
// Find any semicolons with data afterwards
var match = Regex.Match(sql, @"^(.*;[ \t]*[\w\-;]+[\w\s\-]*$)", RegexOptions.Multiline);
// Find any multiline comments
match = Regex.Match(sql, @"/\*.*?\*/", RegexOptions.Singleline);
// Find any non-nested sql commands with a blank line inside them
match = Regex.Match(sql, @"(grant|(?<!\(\s*)select|insert|delete|update)\s+[^;]*(\r\n|\r(?!\n)|(?<!\r)\n)\s*(\r\n|\r(?!\n)|(?<!\r)\n)[^;]*;", RegexOptions.IgnoreCase);
这些是在集成测试套件中实现的,它首先在所有sql脚本上执行以检查明显的错误 - 在Oracle SQL Developer中运行的脚本,但不能在Linux环境中使用sqlplus运行。
我的问题是:我是否应该使用任何图书馆或其他技术 - 我是否听过Cthulu的电话或我的灵魂安全?