Hi,
ich bin dabei eine Art Parser für Formeln zu schreiben.
Vereinfacht kann man sagen ich lasse einen Regex über eine Formel laufen und prüfe, ob die Formel gültig ist. Ich hab insgesamt 3 Regex Ausdrücke für String, Float und Int Formeln, damit ich auch prüfen kann ob der Rückgabetyp eingehalten ist.
Mein Problem sind eigentlich nur noch die Klammern, die man in solchen Formeln beliebig einsetzen kann, ich hab gelesen dass das über ein Nested Konstrukt in dem Regex möglich sein soll aber die Erklärung dort war recht mager, kennt sich vielleicht jemand von euch damit aus?
Hier mein Codebeispiel für die Stringformel:
strValues enthält in dem Beispiel alle Werte und Formeln die in einem String erlaubt sind, der stringPattern erlaubt ein Vorkommen von strValues das optional von beliebig vielen + und weiteren stringValues gefolgt werden kann. Dazwischen sind natürlich Leerzeichen erlaubt.
In diesen Pattern muss ich nun bei den Leerzeichen auch noch die Klammern einfügen, dass man die Werte beliebig Gruppieren kann, klar bei dem String macht das nicht viel Sinn bei den Float und Int Formeln schon eher, die sind aber länger deshalb wollt ich die nicht gleich posten.
Bin für jede Antwort dankbar.
MfG Robert
ich bin dabei eine Art Parser für Formeln zu schreiben.
Vereinfacht kann man sagen ich lasse einen Regex über eine Formel laufen und prüfe, ob die Formel gültig ist. Ich hab insgesamt 3 Regex Ausdrücke für String, Float und Int Formeln, damit ich auch prüfen kann ob der Rückgabetyp eingehalten ist.
Mein Problem sind eigentlich nur noch die Klammern, die man in solchen Formeln beliebig einsetzen kann, ich hab gelesen dass das über ein Nested Konstrukt in dem Regex möglich sein soll aber die Erklärung dort war recht mager, kennt sich vielleicht jemand von euch damit aus?
Hier mein Codebeispiel für die Stringformel:
Code:
(...)
string strValues = @"("+ itemFormulaPattern + propStringPattern + "|" + stringPattern + "|" + stringFormulaPattern + @")";
string formulaStringPattern = @"^ \s* " + strValues + @" (\s* [+] \s* " + strValues + @" \s* )* $";
if(Regex.IsMatch(formel,formulaStringPattern,RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace)
{
...
}
(...)
strValues enthält in dem Beispiel alle Werte und Formeln die in einem String erlaubt sind, der stringPattern erlaubt ein Vorkommen von strValues das optional von beliebig vielen + und weiteren stringValues gefolgt werden kann. Dazwischen sind natürlich Leerzeichen erlaubt.
In diesen Pattern muss ich nun bei den Leerzeichen auch noch die Klammern einfügen, dass man die Werte beliebig Gruppieren kann, klar bei dem String macht das nicht viel Sinn bei den Float und Int Formeln schon eher, die sind aber länger deshalb wollt ich die nicht gleich posten.
Bin für jede Antwort dankbar.
MfG Robert