簡體   English   中英

帶括號的數學運算的正則表達式

[英]Regular expression for math operations with parentheses

在Java中,我試圖編寫一個與數學表達式中的一個單元匹配的正則表達式,即運算符之間的內容

我的意思是,在類似1 + [1 + 2]的表達式中,正則表達式應匹配前1個,然后匹配[1 + 2]。

我所擁有的是* [([-+]?\\ d +(\\。\\ d +)?)(\\ [。+ \\])] *

其中([-+]?\\ d +(\\。\\ d +)?)應該匹配任何數字,並且

(\\ [。+ \\])

應該匹配括號內的內容,但是不起作用...由於某種原因,它匹配']'和''之類的內容。

任何幫助將是巨大的:)

不幸的是,這是練習的一部分,因此我只能使用基本的Java庫...這也意味着它是正則表達式中的練習。 我在這里缺少基本的東西嗎?

您找不到帶有正則表達式的匹配括號。 這是常規語言正則表達式表示的數學對象)的抽水引理引起的,而對於具有匹配的打開/關閉括號的語言,則不成立。

您至少需要一個無上下文解析器。 這些可以使用ANTLR或JavaCC構建。

您將無法使用正則表達式來完成此操作。 可以使用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規范定義的表達語言。

我會回應其他回答者所說的內容(正則表達式不足以解析算術表達式),但建議將其反編譯為ANTLR。

他們甚至提供了一組您可以開始使用的計算器示例

我根據Apache License 2.0的條款發布了基於Dijkstra的Shunting Yard算法的表達式評估器:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM