java - 正则表达式 - 从查询中捕获表名
问题描述
我编写了一个正则表达式来从 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 解析器,所以它不是重复的
解决方案
推荐阅读
- javascript - ASP.NET MVC 5 网站中的 CSS 和 Javascript 以及图像在部署后不会显示
- ruby-on-rails - ActionMailer 在带有附件的邮件中重复正文
- docker - 如何在另一个用作反向代理的容器 Nginx 后面为 Drupal 8 配置带有 Apache 的容器
- sql - 当子表中存在多个指向同一列的外键时,如何获取父表相同的数据?
- c - 除了最后一个之外,所有#pragma GCC 诊断都被忽略
- ios - 当任务太短时,加载覆盖会导致问题
- codeigniter - 发送邮件时将html转换为pdf
- html - 删除 WordPress 中的一些 vc_custom CSS
- angular - 材料芯片 将逗号改为空格
- android - 未应用布局重力底部