我有一个巨大的代码库,里面有很多 JAVA 和 .sql 文件。我打算从所有这些文件中提取所有 SQL 语句。
这是我打算实现这一目标的方式 -
- 构建一个正则表达式文件,其中包含我打算提取的选择、插入、删除、更新等模式。
- 在代码库中逐行解析文件并与正则表达式匹配。如果找到匹配项,则注册代码行、文件名、模式等。
当 SQL 查询被分成多行时,问题就出现了。
当我使用 Buffered Reader 读取行时,我正在使用 java.util.regex.Matcher 和 java.util.regex.Pattern 方法来构建/匹配正则表达式模式。
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 我将整个文件读入单个缓冲区并进一步处理?