Учитывая, что ваше уравнение может иметь вложенный контент, одно решение регулярного выражения может быть неоптимальным.Вместо этого я рекомендую использовать средство сопоставления с образцом и просто сканировать все уравнение на наличие буквенных переменных:
String equation = "(a+2)/3*b-(28-c)";
String pattern = "[A-Za-z]+";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(equation);
while (m.find()) {
System.out.println("Found a variable: " + m.group(0));
}
Found a variable: a
Found a variable: b
Found a variable: c
Примечание. Это решение предполагает, что вы только хотите сами имена переменных, а выне заботятся о таких вещах, как префиксы или коэффициенты.