Laden...

c# Regex Prüfen ob string eine function (=Funktionsdefinition) ist

Erstellt von filmee24 vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.317 Views
F
filmee24 Themenstarter:in
51 Beiträge seit 2011
vor 9 Jahren
c# Regex Prüfen ob string eine function (=Funktionsdefinition) ist

hallo,

ich möchte prüfen ob ein string eine funktion ist. Eine function ist so aufgebaut:
name(argument1, argument2, ....)

wobei mindestens ein argument vorhanden sein muss.

C. Anders

16.807 Beiträge seit 2008
vor 9 Jahren

Was ist das Problem, was hast Du versucht?
Das Forum ist kein Pattern-Generator. Beachte [Hinweis] Wie poste ich richtig? Punkte 4.

Schau Dir [Artikel] Regex-Tutorial an, um selbst den Pattern zu entwickeln.

F
filmee24 Themenstarter:in
51 Beiträge seit 2011
vor 9 Jahren

ich hab diesen pattern string: @".?(.?((,).?)+)"

es funktioniert auch aber ich möchte nun machen dass man zwischen , und dem argument ein leerzeichen machen kann

C. Anders

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo filmee24,

optionale Leerzeichen, oder allgemeiner Whitespaces erlaubt man, in dem man einfach \s* an die entsprechende Stelle im Pattern einfügt. Wenn es tatsächlich nur Leerzeichen sein sollen, dann schreibt man statt dem \s wirklich ein einfaches Leerzeichen.

Damit ist es hier allerdings nicht getan, denn dein Pattern hat verschiedene Nachteile. Er würde z.B. auch auf bla (((() und auf bla (a,,b) passen, was so sicher nicht gewünscht ist.

Das liegt vor allem an der Verwendung von . und daran, dass .*? nicht zwangsläufig so kurz matcht, wie man es vermutet, siehe RegEx kürzester Match [und die Gefahren von .*?].

Von daher wäre folgendes geeigneter(*):

[\s(]+([\s,)]+(,[\s,)]+)*)$

Und mit optionalen Whitespaces eben:

\s*[\s(]+\s*(\s*[\s,)]+\s*(,\s*[\s,)]+\s*))\s$

Wenn es Regeln für den Aufbau des Namens und der Parameter gibt, kann man den Pattern noch weiter einschränken, z.B. wenn die Funktionsamen nur aus (ASCII-)Buchstaben bestehen dürfen: ^\s*[a-z]+\s*...

herbivore

(*) Ich stimme mit Abt vollkommen darin überein, dass das Forum kein Pattern-Generator ist. Ich habe den Pattern nur gepostet, da zu erkennen war, dass du bereits versucht hattest, das Problem aus eigener Kraft zu lösen und die Grundstruktur bereits vorhanden war. Davon abgesehen habe ich die Pattern (in On-the-fly Regex-Tester: Regex-Lab) runtergetippt, ohne sie genauer zu testen.