Соответствует ли математическое выражение регулярному выражению?
Например, это допустимые математические выражения:
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 - вероятно, наиболее популярную реализацию. Я так и сделал, когда отправил свой вопрос.)
Пожалуйста, поправьте меня, если я сказал что-то не так выше.