Я пытаюсь извлечь имена таблиц после предложения 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 мог бы помочь в этом!