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