Регулярное выражение для математических операций с круглыми скобками - PullRequest
0 голосов
/ 29 марта 2011

В Java я пытаюсь написать регулярное выражение, которое будет соответствовать единице в математическом выражении, то есть вещи, которые находятся между операторами

Что я имею в виду, в выражении типа 1 + [1+ 2], регулярное выражение должно соответствовать первому 1, а затем [1 + 2].

Что у меня есть * [([- +]? \ D + (\. \ D +)?) (\[. + \])] *

Из которых ([- +]? \ D + (\. \ D +)?) Должно совпадать с любым числом и

(\ [. +\])

Предполагается, что что-то в скобках соответствует чему-то, но это не работает ... по каким-то причинам оно соответствует вещам типа ']' и ''.

Любая помощь будетgreat:)

К сожалению, это часть упражнения, и поэтому я могу использовать только базовую библиотеку Java ... Она также предназначена для использования в регулярных выражениях.Я что-то упустил здесь?

Ответы [ 4 ]

2 голосов
/ 29 марта 2011

Вы не можете найти соответствующие скобки с регулярными выражениями. Это является следствием леммы прокачки для регулярных языков (математические объекты, которые представляют регулярные выражения), не содержащейся для языков с совпадающими открытыми / близкими паренами.

Вам понадобится как минимум контекстный анализатор. Они могут быть построены с помощью ANTLR или JavaCC.

1 голос
/ 29 марта 2011

Вы не сможете сделать это с помощью регулярного выражения.Арифметическое выражение может быть описано с использованием грамматики BNF, которую можно использовать для генерации синтаксического анализатора с использованием таких инструментов, как JavaCC или ANTLR.

Вот синтаксический анализатор выражений, который я реализовал с использованием JavaCC:

http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.sapphire/plugins/org.eclipse.sapphire.modeling/src/org/eclipse/sapphire/modeling/el/parser/internal/ExpressionLanguageParser.jj?view=markup&revision=1.6&root=Technology_Project

Источник - EPL.Если вы посмотрите вокруг этого местоположения CVS, вы также найдете классы AST и логику оценки.Реализация получена из языка выражений, определенного для спецификаций JSP / JSF.

0 голосов
/ 23 июля 2011

я выпустил средство оценки выражений, основанное на алгоритме Shijnting Yard Дейкстры на условиях Apache License 2.0 :

http://projects.congrace.de/exp4j/index.html

0 голосов
/ 30 марта 2011

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

У них даже есть aнабор примеров калькуляторов , с которых вы могли бы начать.

...