Извините, если вопрос путаница. Снизу текст
value = ( select max( tbl.column_name ) from table tbl where trim(colum2)='value1'
and (trim((colum3)))='value3')
Я хочу, чтобы вывод ниже
select max( tbl.column_name ) from table tbl where trim(colum2)='value1'
and (trim((colum3)))='value3'
, в основном начиная с выбора max (до), кроме), соответствует открывающей скобке.
(select[ ]*max[ ]*\(.*column_name[ ]*\)[^)]*)
Это соответствует только до трима (colum2 Нужна помощь для выхода из скобки), если есть открывающая скобка, включая все вложенные
Спасибо
Редактировать: я наконец сделал это java, как показано ниже. Но хотелось бы узнать решение REGEX
String sql = readFile(file.getPath());
Pattern patTabs = Pattern.compile("(\\([ \n]*SELECT[ \n]*MAX[ \n]*\\(.*COLUMN_NAME[ \n]*\\))", Pattern.CASE_INSENSITIVE);
Matcher tabMat = patTabs.matcher(sql);
while (tabMat.find()) {
int i = tabMat.start();
int j = tabMat.end();
int l = 0;
for (j = tabMat.end(); j < sql.length(); j++) {
char k = sql.charAt(j);
if (k == '(') {
l++;
}
if (k == ')') {
if (l == 0) {
break;
} else {
l--;
}
}
}
System.out.println(sql.substring(i, j + 1))
}