使用正则表达式从SQL中提取表名称

时间:2018-09-14 13:48:19

标签: sql regex oracle parsing

我需要有关使用正则表达式解析SQL(Oracle)的意见。

StackOverflow中有很多有趣的帖子,它们解释说基于HTML或XML的正则表达式是毫无希望的(example)。

SQL也是如此吗?即使答案是否定的,下面的特定问题也可以用正则表达式解决吗?上次备用广告,还有什么用?

要求:验证任意SQL中的表名是否放在方括号中(应为“ [name]”)。

约束:使用ksh / bash,即grep | sed | awk。

对于下面的SQL,脚本应将bad_table标记为不匹配(应该为[bad_table])。应该可以在任意SQL上工作,这里是一个没有联接的简单SQL。

SELECT id
FROM [order]
WHERE id IN (SELECT oid
             FROM [audit] a, bad_table d, (SELECT xid FROM [t1]) r
             WHERE a.data = r.data and a.data = d.data)

1 个答案:

答案 0 :(得分:0)

我已经阅读了更多的书,现在很明显,使用正则表达式无法完成此任务。理论上说-SQL是非常规语言,而regex不能胜任此任务。需要SQL解析器。

话虽这么说,但已经达成妥协,因为必须在工作中做一些事情:使用一组正则表达式(到现在为止已有2个),这些正则表达式可以处理目前需要处理的约300个SQL文件。承认有一天某人会提出一条失败的SQL。为此,请在代码中添加注释,以解释为什么需要进行调整才能覆盖这种极端情况,并且最好使用SQL解析器...

非常感谢大家的贡献。