1

私はC#で関数電卓を作成しており、ユーザーがエントリを追加できる線形関数のコレクションがあります。(...)これらの関数や他の数学関数の使用法を確認し、関数の名前との内容を追跡し、それらを評価の結果に置き換えるために、数式を事前に解析する必要があります。

この式を例にとってみましょう。

Ans1+(x*2)-(y^3)+abs(z)-avg(x, 5, Ans2)-my2ndFunc(y - (x * 2))

方程式でこれらを一致させる必要がある独自の正規表現を作成しました。

abs(z) avg(x, 5, Ans2) my2ndFunc(y - (x * 2))

Regex Tester v1.5.3を使用してテストしましたが、どの項目ともまったく一致しませんでした。これは私が使用した正規表現です:

\b([a-z][a-z0-9]*)\((..*)\)\b

これらの関数に一致し、関数名とパラメーターの内容を格納する正規表現はどれですか?また、誰かが一致を実行してキャプチャグループのコンテンツを取得する方法に関するサンプルコードを提供した場合はクールですが、必須ではありません。

編集 実際の数学的パーサーは必要ありません。操車場アルゴリズムを実装するmuParserがあります。単純な検索と置換を行う必要があります。数学パーサーが実際の数学を処理します。評価する部分を見つけるために正規表現が必要です。

一致する単純な正規表現が必要です。 myfuncname(any content here)

4

1 に答える 1

3

私は自分の正規表現を書きました

残念ながら、正規表現ではあまりうまくいかないでしょう。賢者はかつてこう言いました。

ある問題に直面したとき、ある人は考える

わかりました、正規表現を使用します。

現在、彼らには 2 つの問題があります。

代わりにチェックアウトNCalcします。また、式の解析に何が関係しているかについて詳しく知りたい場合は、following article.

自分で実装したい場合は、Shunting-yard algorithm.


アップデート:

申し訳ありませんが、あなたの質問をよく読んでいませんでした。次のような入力のみを解析する正規表現を探しています

abs(z) 
avg(x, 5, Ans2) 
my2ndFunc(y - (x * 2))

以下を使用できます。

([a-z][a-z0-9]*)\((.+)\)
于 2013-01-15T22:24:08.503 に答える