首页 > 解决方案 > 正则表达式 - 从查询中捕获表名

问题描述

我编写了一个正则表达式来从 AWS Athena 上的 sql 查询中捕获表名

(?<=from|join|table|into|exists|update) (?!IF)(\w+\.*)+

但是当有多个用逗号分隔的表名时它会失败,就像这样

Select distinct W.WORKER_ID, W.FIRST_NAME, W.Salary 
from Table1 W, Table2 W1 
where W.Salary = W1.Salary 
and W.WORKER_ID != W1.WORKER_ID;

在这种情况下,它只捕获Table1. 我似乎找不到任何方法来捕获Table2(或在某些情况下Table3

我试过了

(?<=from|join|table|into|exists|update) (?!IF)(\w+\.*)+|(?:\s+\w*\,\s*(\w+\.*)+)

但这也捕获了列名,这意味着条件部分(?<=from...)不起作用。我怎样才能解决这个问题?我需要以某种方式使用捕获的组 1 来捕获其他表。

这是我正在针对https://regex101.com/r/0dh3XV/2测试我的正则表达式的一些字符串

PS:我使用正则表达式从查询中读取获取表名并从查询中获取表名,但解决方案对我不起作用。

编辑:不,我不需要任何 sql 解析器,所以它不是重复的

标签: javaregex

解决方案


推荐阅读