Интересует не полный разбор, а выборочный. Т.е. нужно понять, что это например оператор создания таблицы и достать из него имя таблицы, все остальное не интересует, даже если это будет заведомо неверное выражения типа: «CREATE TABLE test_table;», достаем значение «test_table» и останавливаемся. Или например достать имя обоих таблиц в операторе создания форенкея.
Еще было бы здорово, чтобы эти описания хранились в каком-то текстовом виде, т.е. чтобы можно было добавить новый объект для разбора или изменить существующий и при этом ничего не пересобирать.
Регулярки, да, это на крайний случай. Я думал найти что-нибудь готовое или полуготовое, возможно sql-ориентированное.
Поиск выдал несколько таких библиотек (zql, etc), но насколько я понял у них уже определны описания объектов и они осуществляют полный разбор до винтиков…
На стеке обсуждают подобный вопрос.
Предложены следующие варианты JSqlParser, ZQL и еще платный вариант. Так же там порекомендовали воспользоваться ANTLR — похоже, что для Вашего случая подойдет функционал StringTemplate