0

正規表現を使用した数式の検証を探しています。これが私が使用しているサンプルコードです:-

 string equation = "(a+b)*10";

 bool b = false;

 Regex rx = new Regex(@"^((?<o1>[^-+*/()]+|\([^-+*/()]+\)|(?<p>\()+[^-+*/()]+|[^-+*/()]+(?<-p>\)))[-+*/])+(?<o2>[^-+*/()]+|\([^-+*/()]+\)|(?<p>\()+[^-+*/()]+|[^-+*/()]+(?<-p>\)))(?(p)(?!))$");

 if (rx.IsMatch(equation))
     {
      b = true;
     }

Like "(a+b)*100" という表現で問題なく動作しています。つまり、「(a+b))*100」または「(a+b*100」または「(a+b)*100)」のような中括弧の配置を間違えると、完全な検証が行われます。しかし、「Sum(1,2)」や Sqrt(8) などのユーザー定義関数の紹介に行くと、検証に失敗しています。

これで自分の機能も検証したい。「Sum(1,2)」、「Sum(1,2」、「Sum1,2)」、「Sum(1,2))」のように。つまり、ブレースの適切な使用に注意する必要があります。

注:- 私は ANTLR を使用してこれらの機能を作成しています。

ありがとう

4

1 に答える 1

0

一般的な数式は複雑すぎて、正規表現を使用して解析できません。ANTLR を使用して、代わりに個々の要素を解析できる文法を記述します。

于 2013-02-13T07:56:47.087 に答える