Regex für Anfänger

Weil im String auch formel(..) vorkommt.

mfg chmee

Aso, wo war ich da mti meinen Gedanken... Wenn ich den Thread jetzt nochmal durchlese isses klar :D Ist es immer nur formel oder ka da auch etwas anderes stehen?

Edit:

Ist es jetzt hier eigentlich möglich das formel() noch mit in das pattern zu nehmen welches dann rausgeworfen wird? also sowas wie

Genau das hat mich noch ein wenig beschäftigt und ich habe eine Lösung glaube ich! Diese nennt sich Look-around assertion.

Java:
String s = "formel(test1:test2:test3)";
		
Pattern p = Pattern.compile("(?<=formel\\()([^:]+:?)*(?=\\))");
Matcher m = p.matcher(s); 

while(m.find()) {
	System.out.println(m.group());
}

Ausgabe:
Code:
test1:test2:test3

Entspricht das dem Ziel?
 
Zuletzt bearbeitet:
HonniCilest: Ist das Ergebnis ein Array jedes einzelnen Feldes oder lediglich des ganzen Eintrages innerhalb der Klammern? Ersteres wäre gut, Zweiteres -nunja- schon mehrmals genannt worden :D Ich habe meine Regexkenntnisse lediglich aus der php-Welt, ich weiß nicht, was das m.group() anstellt.

mfg chmee
 
HonniCilest: Ist das Ergebnis ein Array jedes einzelnen Feldes oder lediglich des ganzen Eintrages innerhalb der Klammern? Ersteres wäre gut, Zweiteres -nunja- schon mehrmals genannt worden :D Ich habe meine Regexkenntnisse lediglich aus der php-Welt, ich weiß nicht, was das m.group() anstellt.

mfg chmee

Es ging mir lediglich um die zitierte Aussage:

Ist es jetzt hier eigentlich möglich das formel() noch mit in das pattern zu nehmen welches dann rausgeworfen wird?

D.h. nein es ist kein Array. m.group() gibt lediglich den direkt zuvor gefundenen Match aus, da meine Schleife rein theoretisch mehrere Matches finden könnte. Was zwischen "(?<=formel\\()" und "(?=\\))" steht soll hier nebensächlich sein. Mir geht es um die beiden Ausdrücke, da diese "formel(" vorgestellt und ")" nachgestellt erfordern und nicht mit ins Ergebnis übertragen.
 
Zuletzt bearbeitet:
Code:
[^:^\)^\(]+
ist n bissel schmutzig, aber betrachten wir -neben den Doppelpunkten- auch die Klammern als Trenner. Letztendlich müssen wir nur Feld 0 des Array gewissentlich übersehen ;)

mfg chmee

Nachtrag: Vielleicht ist diese Regex interessanter: Das Ergebnis ist ähnlich ABER es erscheint formel( nur als erster Eintrag des Array, wenn es auch dasteht :D
Code:
formel\(|[^(formel)^:^\)]+

formel(123:456:789)
            [0] => formel(
            [1] => 123
            [2] => 456
            [3] => 789

forel(123:456:789)
            [0] => 123
            [1] => 456
            [2] => 789
Die ist auch nicht 1A, weil formel in der eckigen Klammer als Sammlung von Buchstaben gewertet wird, aber so ähnlich würde das alles gehen :D
 
Ich glaube ich weiß, was du mir mit den Klammern als Trenner sagen möchtest.
Beispiel:
Ich hätte mit Benutzung von "blablablaformel(test1:test2:test3)blablabla" immernoch eine "korrekte" Lösung, zufällig. Sähe der String aber wie "blablablaformel(test1:test2:test3)blablablaformel(test4:test5:test6)blablabla" aus, dann würde er es falsch ausgeben indem er die allerhinterste Klammer verwendet. Deswegen die Klammern als zusätzlich Trennzeichen?!

Edit:

Ich hab' jedenfalls mal ein wenig mit Lookaround Assertion rumgespielt und wie wäre es so:
Code:
(?<=formel\\()[^:^\\(^\\)]*(?=\\))|(?<=:)[^:^\\(^\\)]*(?=\\))|(?<=formel\\()[^:^\\(^\\)]*(?=:)|(?<=:)[^:^\\(^\\)]*(?=:)

Ausgabe:
Code:
test1
test2
test3
 
Zuletzt bearbeitet:
Ich glaube über die Sinnhaftigkeit brauchen wir nichtmehr diskutieren :D.
Dennoch finde ich es super und lobenswert das sich hier alle eingebracht haben.
Somit Wissen wir ja nun in etwa wo regex dann doch Probleme hat :)
 
Zurück