2011-07-03 33 views
0

最後に1つの正規表現の問題私は助けが必要です。私がしようとしているのは、正規表現に単項記号を認識させながら数式表現を解析できることです。単項記号と正規表現とのマッチング正規表現

myVar = -5 
myVar = +5 

正規表現は正しく整数として両方-5と+5を識別します。これらの2つのシナリオで正常に動作します

[\+\-]?[0-9]+ 

:私は整数を解析するために、次を使用しています。これは、しかし、正確にマッチします

myVar = 7-5 

:今

myVar = 7*-5 

は、正規表現はその2つの整数を識別している7-5シナリオでやっていることを、私はこのようなシナリオを持っている場合、私の問題はあります7および-5。実際には、整数(7)、マイナス記号( - )、別の整数(5)を識別できるようにしたいと考えています。これを行うためにはどのような正規表現のパターンが必要ですか?

ありがとうございます。これは、.NET Regexです。

答えて

4

正規表現は、数式を解析するための最良の選択肢ではありません。 Recursive descent parserまたはReverse Polish notationまたは他のより適切なアルゴリズムを見てください。所望の結果を得るためにMatchCollectionおよびグループを使用すると

((\d)+[\+\-\*/])* 

-1

はこれを使用してください。次のように問題の入力を仮定

0

は限られている:

  1. 1つのバイナリ演算子のMAX(*、/、+、 - )
  2. 2つの単項演算子の最大値(+、 - )
  3. すべての数値は、整数
  4. ない空白が

は、その後、次の正規表現は動作します、次のとおりです。
(([\+\-]?[\d]+)([\+\-\*\/]))*([\+\-]?[\d]+)
(結果の最初のグループを無視します。)

をあなたは、スペースを考慮したい場合は、parentheticals間\s*を追加します(グループ2-4から)
(([\+\-]?[\d]+)\s*([\+\-\*\/]))*\s*([\+\-]?[\d]+)

例入力と出力:
Input \2 \3 \4 -5 -5 +5 +5 7-5 7 - 5 7*-5 7 * -5 -7*-5 -7 * -5