У меня огромная кодовая база, в которой много файлов JAVA и .sql. Я намерен извлечь все операторы SQL из всех этих файлов.
Вот как я намерен добиться этого -
- Создайте файл регулярного выражения, содержащий шаблоны, такие как выбор, вставка, удаление, обновление и т. д., которые я намереваюсь извлечь.
- Разбирать файлы построчно в кодовой базе и сопоставлять с Regex. Если совпадение найдено, зарегистрируйте строку кода, имя файла, шаблон и т. д.
Проблема возникает, когда SQL-запросы разбиты на несколько строк.
Я использую методы java.util.regex.Matcher и java.util.regex.Pattern для создания/сопоставления шаблонов регулярных выражений, когда я читаю строки с помощью Buffered Reader.
pattern = Pattern.compile(regexString,Pattern.CASE_INSENSITIVE);
.
.
matcher = pattern.matcher(lineBuffer.readline().trim());
if( matcher.find()){
//Do something
}
Для многострочных операторов я должен искать терминатор строки ";" - если не найдено, я могу прочитать следующую строку и добавить вывод в совпадающую строку, чтобы он понимался как один запрос.
while(!lineString.endsWith(";")) {
lineString = lineString + lineBfr.readLine().trim();
}
Есть ли лучший способ решить это требование, используя Pattern.MULTILINE или StreamBuffers, где я читаю весь файл в один буфер и продолжаю его обработку?