如何使用正则表达式从SQL语句中提取表名?
从SQL语句中提取带库名的表名
需求说明
需要从给定SQL语句里提取形如库名.表名的合法表名,排除带括号的存储/函数调用(如test2.table4(10))以及无库名且带空格的无效表名(如table 1)。
正则表达式方案
用以下正则可以精准匹配目标表名:
(?:INSERT INTO|FROM|from)\s*(\w+\.\w+)(?!\()
正则拆解
(?:INSERT INTO|FROM|from):匹配SQL里的表名前置关键词,不捕获该部分内容\s*:匹配0个或多个空格,兼容*from这种无空格的写法(\w+\.\w+):捕获带库名的表名,\w涵盖字母、数字和下划线,符合常规库表命名规则(?!\():负向预查,确保匹配到的表名后面没有左括号,排除存储过程/函数调用的情况
示例处理结果
按照上述正则处理给定的SQL语句,得到如下结果:
| Field1 | field2 |
|---|---|
| a | test.table2 |
| b | test1.table3 |
| c | test2.table4 |
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

