我想驗證下面的代碼中的字符串「expression」是否是公式。在java中驗證數學表達式
String expression = request.getParameter(FORMULA);
if(!Pattern.matches("[a-zA-Z0-9+-*/()]", expression)){return new AjaxMessage(AjaxMessage.ResponseStatusEnum.FAILURE, getJsonString(, "Manager.invalid.formula" , null));
}
爲表達的值的實例是{A + B/2,(A + B)* 2,(約翰 - 最大),等}只是用於上下文(在變量名公式可能會有所不同,算術表達式只包含[+ - /(*)*]特殊字符正如您所看到的,我嘗試使用正則表達式進行驗證(新的正則表達式),但我認爲這是不可能的,因爲我不知道變量名稱的長度
有沒有辦法在java中使用正則表達式或任何其他庫進行驗證?
在此先感謝。
'[+ - *]'創建一個*範圍*,並且讓你的正則表達式無效。把'-'放在字符類的末尾。 –
好吧,使用正則表達式來處理這樣的事情並不是一件好事。有效的算術表達式不僅限於「它只包含某些字母」這個問題,而更多的是一種語義上的東西(每個括號都像這樣[]())被關閉,並且更多的是自然語言解析。這只是我的愚見,詳見:http://dsp.rice.edu/sites/dsp.rice.edu/files/publications/conference-paper/2015/mlp_0。pdf – Najzero