簡體   English   中英

Java正則表達式匹配數學表達式模式

[英]Java regex matching the mathematical expression pattern

我試圖遞歸或迭代地匹配這樣的字符串模式。

術語:-可以是任何變量(字符串)或整數
表達式:-術語+表達式或術語*表達式或術語/表達式或術語-表達式

這樣的想法是為這樣的數學表達式找到匹配的模式

ZING ^ 30 * sin(45)+ 46 * LENGTH-20

我們假設該術語已經准備好。

和往常一樣,我將從Java中的一個非常糟糕的問題開始。

[[term\\+]*[term\\*]*[term\\\]*[term\\-]*]+term

您為該工作使用了錯誤的工具。 根據定義,正則表達式無法使用遞歸語法來描述語法。 查找Chomsky層次結構。 您需要一個表達式解析器。 查找Dijkstra Shunting-yard算法或“遞歸下降表達式解析器”。

這看起來像作業,所以我不會給您完整的答案。 如果您知道如何使用中等復雜的正則表達式,那么您應該能夠提出一個正則表達式來代表您的“術語”,這應該不太困難。 現在,用於“表達式”的正則表達式將是一個術語,后面是零個或多個出現的“運算符后跟術語”(運算符是+-*/ ,也許是^ ?之一)。 也就是說,表達式將是“ term”或“ term op term”或“ term op term op term”等。

注意:這是您編寫正則表達式的方式,該正則表達式告訴您輸入是否具有正確的格式,但這不會幫助您將其分解為多個部分。 為此,您需要在循環中匹配的另一個正則表達式(或兩個)。 不過,我不能說出您的要求是什么。

暫無
暫無

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

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