Соответствует ли математическое выражение регулярному выражению?

Например, это допустимые математические выражения:

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

И это недопустимые математические выражения:

--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

У меня нет проблем с соответствием числам с плавающей точкой, но у меня проблемы с соответствием скобок. Любая идея? Если есть лучшее решение, чем регулярное выражение, я тоже приму. Но регулярное выражение является предпочтительным.

========

Редактировать:

Я хочу прокомментировать мой выбор «принятого ответа», надеясь, что люди, которые задают этот вопрос и найдут эту ветку, не будут введены в заблуждение.

Есть несколько ответов, которые я считаю «принятыми», но я не знаю, какой из них лучший. Поэтому я выбрал принятый ответ (почти) случайным образом. Я рекомендую прочитать ответ Гийома Маларта, а также принятый ответ. Все они дают практические решения моего вопроса. Для несколько строгого / теоретического ответа, пожалуйста, прочитайте комментарии Дэвида Торнли под принятым ответом. Как он упомянул, расширение Perl регулярным выражением (происходящим из регулярного языка) делает его «нерегулярным». (Я не упомянул ни одного языка в своем вопросе, поэтому большинство ответчиков предположили реализацию регулярных выражений в Perl - вероятно, наиболее популярную реализацию. Я так и сделал, когда отправил свой вопрос.)

Пожалуйста, поправьте меня, если я сказал что-то не так выше.

Ответы на вопрос(8)

Ваш ответ на вопрос