Поскольку вы проходите через все это, я бы сказал, что вы все равно должны это делать, но перейдите на в обратном направлении . Найдите наименьшие подмножества парантетических выражений, а не наибольшие:
(\([^(]+\))
Оцените их и замените их значениями, т. Е. При первом раунде совпадения будут (3 / 4)
, (3 * 2)
и (1 + 2)
. Замените их на 0,75
, 6
и 3
соответственно, дав новую строку:
(5 + (4 + 0,75 + 6 + 2)) + 3
И затем вы повторяете это до тех пор, пока не останется больше выражений в скобках, работая снизу вверх, а не сверху вниз (точно так же, как вы бы вручную решали такую задачу!)
Кроме этого, я согласен со всеми остальными, что в точности то, что вы просили , не должно (в действительности не может не) выполняться с регулярными выражениями. Но ваша проблема может быть решена с помощью этого решения, включающего регулярные выражения.