Scampada,
пока в строке есть синусы -- они вычисляются - не match нужен а test строки и перезапись первого попавшегося синуса.
потом так-же косинусы
потом находятся первые любые скобки - если они есть - и в них вычисяется пока есть ^ и ! потом * / - + тоже пока есть - вместо скобок получили число -- ищем следующие скобки пока не закончатся -- скобок нет -- прогоняем результрующую строку по этому же алгоритму
^ ! */-+
|