以下のコードのような文字列 "式"が数式であるかどうかを検証しようとしています。 式の値の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で他のライブラリを使用して検証を達成するための方法はありますか?ありがとうございます。
'[+ - *]' *範囲*を作成し、あなたの正規表現が無効になります。文字クラスの最後に '-'を置きます。 –
よく、Regexを使ってこのようなことをするのは良いことではありません。有効な算術式は、「特定の文字のみを含んでいたのですか?」という意味の問題ではなく、すべての括弧がそのような[]()のように閉じられたかどうかという意味の問題ではなく、自然言語解析の問題です。それはちょうど私の謙虚な意見です。詳しくは、http://dsp.rice.edu/sites/dsp.rice.edu/files/publications/paper/2015/mlp_0を参照してください。pdf – Najzero