SQLを文字列リテラルとその他の部分に分ける


private static final Pattern pattern = Pattern.compile("'([^\']|'')*'");

private List getStringLiterals(String sql, List others) {
List literals = new ArrayList();
int i = 0;

for (Matcher matcher = pattern.matcher(sql); matcher.find(); i = matcher.end()) {
literals.add(matcher.group());

if (others != null)
others.add(sql.substring(i, matcher.start()));
}

if (i < sql.length())
others.add(sql.substring(i));

return literals;
}

public void func() {
String sql = "select * from foo where bar = 'あいうえお' and zoo = 'i don''t know.' order by baz";
List others = new ArrayList();
List literals = getStringLiterals(sql, others);
System.out.println(literals);
System.out.println(others);
}

コメントの中身が置換されるな…