あなたは配列の並べ替えを一致させる必要がある正規表現はこれです:
\s*-?\d+(?:\s*[-+/*]\s*-?\d+)+\s*
それは構成部品だとそれを打破するのをしてみましょう!あなたは、スペースと一致しない場合
\s* # Optional space
-? # Optional minus sign
\d+ # Mandatory digits
(?: # Start sub-regex
\s* # Optional space
[-+*/] # Mandatory single arithmetic operator
\s* # Optional space
-? # Optional minus sign
\d+ # Mandatory digits
)+ # End sub-regex: want one or more matches of it
\s* # Optional space
は(それらの\s*
のすべてを削除し、それは非常に多くのユーザーを驚かせるだろうことに注意してください。今すぐ)
、あなたがそれに\
の各文字をエスケープするように注意する必要があります()コンパイルの前にJavaで文字列リテラルとして上記をコード:
String regex="\\s*-?\\d+(?:\\s*[-+/*]\\s*-?\\d+)+\\s*";
他の事をを意識することこれはではありません。正規表現をJava用に断片化して解析し、式評価ツリーを構築します。それはちょうど(あなたのコードの残りの部分で)文字列全体にマッチします。 (カッコを入れても、何の助けにもならないでしょう;何らかの繰り返しの中に入れば、マッチした場所の最初の文字列しか報告されません)。それを正しく行う最も簡単な方法は、次のようなパーサージェネレータを使うことです。 Antlr(括弧で囲まれた部分式、演算子の優先順位の管理など)を
の文脈で使用しています。正規表現でテストするサンプルテキストを与えることができますか? –
ok 15-9 * 12/5 + 9 * 4これをユーザー入力として解析し、この式を計算する必要があります –
計算またはチェック?正規表現はマッチングに使用され、計算はチェックされません。 –