¿Coincidencia de expresión matemática con expresión regular?

Por ejemplo, estas son expresiones matemáticas válidas:

a * b + c
-a * (b / 1.50)
(apple + (-0.5)) * (boy - 1)

Y estas son expresiones matemáticas inválidas:

--a *+ b @ 1.5.0  // two consecutive signs, two consecutive operators, invalid operator, invalid number
-a * b + 1)  // unmatched parentheses
a) * (b + c) / (d  // unmatched parentheses

No tengo ningún problema con la coincidencia de números flotantes, pero tengo dificultades con la coincidencia de paréntesis. ¿Alguna idea? Si hay una mejor solución que la expresión regular, aceptaré también. Pero se prefiere la expresión regular.

========

Editar:

Quiero hacer algunos comentarios sobre mi elección de la "respuesta aceptada", esperando que las personas que tienen la misma pregunta y encuentren este hilo no se engañen.

Hay varias respuestas que considero "aceptadas", pero no tengo idea de cuál es la mejor. Así que elegí la respuesta aceptada (casi) al azar. Recomiendo leer la respuesta de Guillaume Malartre además de la respuesta aceptada. Todos ellos dan soluciones prácticas a mi pregunta. Para obtener una respuesta algo rigurosa / teórica, lea los comentarios de David Thornley debajo de la respuesta aceptada. Como mencionó, la extensión de Perl a la expresión regular (originada del lenguaje regular) la hace "irregular". (No mencioné ningún idioma en mi pregunta, por lo que la mayoría de los que respondieron asumieron la implementación de Perl de expresión regular, probablemente la implementación más popular. Lo mismo hice cuando publiqué mi pregunta).

Por favor corrígeme si dije algo mal arriba.

Respuestas a la pregunta(7)

Su respuesta a la pregunta