我编写了一个正则表达式来从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:我读了get table name from query using a regex和get table name from query,但是解决方案对我不起作用。
编辑:不,我不需要任何SQL解析器,因此它不是重复的