Regex für Anfänger

SonicBe@m

Erfahrenes Mitglied
Hallo zusammen,

evtl kann mir einer helfen und sagen ob sowas in Regex überhaupt möglich ist.

Folgenden text hab ich als Beispiel

formel(test1:test2:test3)

nun möchte ich via regex jeden einzelnen Teil rauslesen.
wäre der Text wie folgt:
test1:test2:test3
könnte ich das ganz einfach mit (.*?):+|(.*?)$
machen, allerdings hab ich dann 3 Gruppen.

Ausserdem ist in dem Beispiel dann der formel() teil auch nicht enthalten und ich kann mir leider nicht mehr helfen.

Vielleicht kennt ja einer eine möglichkeit wie ich das Pattern schreiben muss um folgendes Ergebniss zu erhalten wenn ich folgenden Wert übergebe.
formel(test1:test2:test3)
return bsp. [test1,test2,test3] < array

viele Grüße
Stephan
 
Oh hab natürlich wieder ein wichtiges Detail vergessen....
Der Wert in den Klammern soll natürlich unendlich sein *g*
formel(a,b,c,d,N)

Ich mein natürlich könnte ich hergehen und das ganze mit 2 durchläufen machen aber das will ich ja erstmal nicht.
allein die Tatsache das folgendes nicht das bringt was man glauben mag :

formel(test1:test2:test3)
regex =
formel\((.*?):+\)



Versuch mal das hier:

Code:
.*\((.*):(.*):(.*)\)
 
Zuletzt bearbeitet:
Ich glaube hier wäre es einfacher, den Teil aus der Klammer zu holen und ihn dann mit split in ein Array aufzuteilen.
 
Ja das es anders geht ist mir bewusst, ich möchte allerdings das ganze in Regex abbilden.
eigentlich gehts mir hauptsächlich darum ob Regex genau dieses Problem überhaupt abhandeln kann oder ob das schon zuviel ist.
Ich glaube hier wäre es einfacher, den Teil aus der Klammer zu holen und ihn dann mit split in ein Array aufzuteilen.
 
Code:
abc:def:ghi:jkl

(:([^:]*))

? Ergebnis im array[2] ?

mfg chmee

p.s.: Naja, fast, aber etwa so einfach müsste die Sache lösbar sein :D

Code:
(abc:def:ghi:jkl)

(:?)([^:()]*)
Es geht sicherlich noch schöner, denn Felder [0], [n] und [n-1] bleiben leer.
 
uff ehm Ja sehr cool! :)
Kannste mal erklären was da jetzt genau passiert? ich blick da grad nicht durch :D
Code:
PS: (?::?)([^:()]*)
somit wäre dann auch das 2te Array weg.

Ist es jetzt hier eigentlich möglich das formel() noch mit in das pattern zu nehmen welches dann rausgeworfen wird? also sowas wie
Code:
formel\((?::?)([^:()]*)\)

Code:
abc:def:ghi:jkl

(:([^:]*))
? Ergebnis im array[2] ?

mfg chmee

p.s.: Naja, fast, aber etwa so einfach müsste die Sache lösbar sein :D

Code:
(abc:def:ghi:jkl)

(:?)([^:()]*)
Es geht sicherlich noch schöner, denn Felder [0], [n] und [n-1] bleiben leer.
 
Zuletzt bearbeitet:
Ja das es anders geht ist mir bewusst, ich möchte allerdings das ganze in Regex abbilden.
eigentlich gehts mir hauptsächlich darum ob Regex genau dieses Problem überhaupt abhandeln kann oder ob das schon zuviel ist.
Nein, das geht nicht (vorausgesetzt ich habe richtig verstanden was du willst). Du hast im Match nachher lediglich genau soviel Gruppen wie du Klammern (Gruppierungen) angegeben hast (plus die alles umfassende Gruppe).

Du könntest höchstens eine große Anzahl an Gruppierungen angeben:
Code:
([^:]+)?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?
... und dann schauen wieviel Gruppen gefüllt sind.

Allerdings würde ich dir empfehlen einfach das innere der Klammern zu extrahieren und dann am Doppelpunkt zu splitten.

Gruß
 
Ich bin mit dem Kopf leider schon wieder woanders. Folgend:
Code:
formel(test1:test2:test3)

'/(formel\()+ (([^:].*):?)+ \)/Sx'

-> array[2][0] = test1:test2:test3
Welches man durch das obige regex schleifen könnte. Es wird doch mit Sicherheit eine Möglichkeit geben, dies in einem Regex zu realisieren. Aber das bleibt Deine Aufgabe :D

mfg chmee
 

Neue Beiträge

Zurück