Извлечь список элементов в SQL с помощью регулярного выражения - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь извлечь имена таблиц после предложения FROM из запроса SQL с использованием Regex, но без какого-либо удовлетворительного результата.

То, что я хотел бы выполнить sh, это extract:

table_1, table_2, table_3 как до, так и после предложения JOIN, отбрасывая любое другое «имя» или токен.

Цель - найти, какие "таблицы зависимостей" есть в запросе.

Вот пример:

SELECT ("total") "_charges"
FROM
  table_1
, table_2
, table_3 table_3_alias
WHERE ("table_1"."id" = "table_2"."id");

Я бы хотел get: table_1 table_2 table_3

SELECT *
FROM
  table_1
, table_2
, table_3 table_3_alias JOIN table4, table5_abc
WHERE table_1.id > 12;

Я хотел бы получить: table_1 table_2 table_3 table4 table5_abc

SQL только что составлен и сам по себе незначителен, однако он представляет собой возможную случаи, которые я видел в своих тестах: имена таблиц с подчеркиванием, запятые рядом со словом или после слов, разделенных пробелами, новые строки и т. д. c ..

Моя лучшая попытка:

(?!\W+from_)(\W+FROM\W*(?!select|where)(\w*)|JOIN\W*(?!select)(?!.*array)(\w*))

, который получает только первый элемент из двух списков, table_1 и table4 в группе захвата.

Я был бы признателен всем, кто обладает большими знаниями Regex мог бы помочь в этом!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...