Решение
Вы можете использовать это регулярное выражение для достижения того, что вам нужно:
\s?(.+?)[,;](?![\w,]+?\))
А вот фрагмент кода, который выполняет сопоставление:
String query = "query1 (param1,param2,param3), query2, query3, query4 (param1);";
String pattern = "\\s?(.+?)[,;](?![\\w,]+?\\))";
List<String> list = new ArrayList<String>();
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(query);
while (m.find()) {
list.add(m.group(1));
}
System.out.println(list); // [query1 (param1,param2,param3), query2, query3, query4 (param1)]
Объяснение
Мы создаем группу захвата, используя парантез, и говорим ей заканчивать, когда он видит символ ,
или ;
, но только если сразу после него нет )
(это то, что является отрицательным Lookahead предназначен для - (?!\w+?\))
)
Мы также хотим удалить начальные пробелы, поэтому мы добавили часть \s?
вне группы захвата.