Например, это допустимые математические выражения:
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
У меня нет проблем с совпадением чисел с плавающей запятой, но с трудностями с совпадающими скобками. Есть идеи? Если есть лучшее решение, чем регулярное выражение, я тоже соглашусь. Но регулярное выражение является предпочтительным.
========
Edit:
Я хочу высказать некоторые замечания по моему выбору "принятого ответа", надеясь, что люди, которые имеют один и тот же вопрос и найдут эту тему, не будут введены в заблуждение.
Есть несколько ответов, которые я считаю "принятыми", но я понятия не имею, какой из них лучший. Поэтому я выбрал принятый ответ (почти) случайным образом. Я рекомендую также прочитать ответ Гильома Малтарса, а также принятый ответ. Все они дают практические решения моего вопроса. Для некоторого строгого/теоретического ответа, пожалуйста, прочитайте комментарии Дэвида Тёрнли в соответствии с принятым ответом. Как уже упоминалось, расширение Perls к регулярному выражению (возникшее из обычного языка) делает его "нерегулярным". (Я не упомянул ни одного языка в своем вопросе, поэтому большинство ответчиков предполагало, что Perl реализует регулярное выражение - возможно, самую популярную реализацию. Так же, когда я разместил свой вопрос.)
Пожалуйста, поправьте меня, если я скажу что-то неправильно выше.