如何使用Java从单个字符串中删除单行SQL注释? 我尝试了类似下面的内容,但这似乎并非万无一失。 需要一个正则表达式,当它们在select语句中显示为文字时会占用' - '字符,就像在双重选择'--hi'中一样。
protected String removeSingleLineComments(String sql)
{
Pattern pattern = Pattern.compile("--[^\r\n]*");
Matcher matcher = pattern.matcher(sql);
while(matcher.find()) {
if((matcher.start()==0) || (matcher.start()>0 && sql.charAt(matcher.start()-1) != '\''))
{
sql =sql.replace(sql.substring(matcher.start(), matcher.end()), "").trim();
}
}
return sql;
}
答案 0 :(得分:0)
模式看起来没问题。 Matcher用作:
Pattern pattern = Pattern.compile("^(([^']+|'[^']*')*)--[^\r\n]*");
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(sb, "$1");
}
matcher.appendTail(sb);
return sb.toString();
模式确实:
^((
[^']+
|
'[^']*'
)*)
--[^\r\n]*
行开始,重复非撇号字符或字符串文字。 额外的括号是让$ 1获取剩余的SQL。
答案 1 :(得分:0)
Regexp应该是:--.*$
,以便携方式匹配行尾。
答案 2 :(得分:0)
只需用回车符分割字符串,然后用“-”分割每一行:
private static String removeInLineSQLComments(String sql) {
StringBuilder stringBuilder = new StringBuilder();
for (String line : sql.split("\n")) {
stringBuilder.append(line.split("--")[0]).append("\n");
}
return stringBuilder.toString();
}