Regex für Anfänger

Also, ich glaub ja auch, dass das Abbilden auf einen einzigen Regex hier nicht klug wäre. Wenn ich dich recht verstanden habe, dann willst du ja beliebig viele durch Doppelpunkt voneinander getrennte Parameter eines Methodenaufrufs extrahieren.

Erster Lösungsansatz:
Java:
String  s = "formel(test1:test2:test3)";
Pattern p = Pattern.compile(".*\\(([^:)]+(:[^:)]+)*)\\).*");
Matcher m = p.matcher(s);
if (m.matches()) {
    String[] params = m.group(1).split(":");
    // params enthält nun die Parameter
}

Zweiter Ansatz:
Java:
String  s = "formel(test1:test2:test3)".replaceAll("^[^(]+\\(", "").replaceAll("\\)$", "");
String[] params = s.split(":");
// params enthält nun die Parameter

Gruß
Matthias
 
Zuletzt bearbeitet:
Ich rate mal drauf los, dass diese Lösung immer nicht genommen wird, da der Threadersteller lieber Regex verwenden möchte :rolleyes:
 
Nach ner Spazierfahrt auf m Rad muss ich deepthroats Aussage unterstreichen. Mit einer Regex wirds nicht gehen. Man kann in einer Regex nunmal nicht eine unbekannte Anzahl Wiederholungen einer Gruppierung durchführen. Deepthroats Versuch ist die einzig funktionierende, indem man die Maximalanzahl begrenzt. Das wiederum beschränkt die Funktionsausgabe, also am Ende doch 2x Regex oder die Variante mit Explode/Split und Doppelpunkt.

mfg chmee
 
Zuletzt bearbeitet:
Dann kann ich nur sagen, dass es nicht möglich ist, dieses Problem mit Hilfe eines einzigen regulären Ausdrucks und nur unter Verwendung von Match-Gruppen zu lösen, solange der Anspruch besteht, dass die Parameterliste beliebig lang sein darf.
 
zitiert: Man kann in einer Regex nunmal nicht eine unbekannte Anzahl Wiederholungen einer Gruppierung durchführen. (!)

Sollte wohl genau das heissen.. ;)

mfg chmee
 
Super vielen Dank für eure Antworten.

Naja schlußentlich ist es ja kein Beinbruch wenn es nicht geht, für Spring und solche ferkeleien wäre es aber fein gewesen bei z.b. UrlRewrites.
Eigentlich sehr schade da man sich so ne menge zeit gespart hätte.

In diesem sinne bin ich ja beruhigt das ichs nicht hinbekommen habe weil es einfach nicht möglich ist :D

Vielleicht gehts aber doch! :P
 
zitiert: Man kann in einer Regex nunmal nicht eine unbekannte Anzahl Wiederholungen einer Gruppierung durchführen. (!)

Sollte wohl genau das heissen.. ;)

Jap, sollte es. ;)

Reguläre Ausdrücke sind schon was Feines, aber sie haben eben ihre Grenzen. Ich find's aber gut, wenn man versucht, die Grenzen auszuloten. Insofern weiterhin viel Erfolg!
 
Also, ich glaub ja auch, dass das Abbilden auf einen einzigen Regex hier nicht klug wäre. Wenn ich dich recht verstanden habe, dann willst du ja beliebig viele durch Doppelpunkt voneinander getrennte Parameter eines Methodenaufrufs extrahieren.

Erster Lösungsansatz:

java Code:

Zweiter Ansatz:

java Code:


Gruß
Matthias

3. Lösungsansatz:

Java:
Pattern p = Pattern.compile("[^:]+");
Matcher m = p.matcher("test1:test2:test3"); 

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

Ausgabe:
Code:
test1
test2
test3

Ich versteh das Problem nicht, warum man keine unendliche Anzahl abbilden könnte :confused:
 
Zuletzt bearbeitet:
Zurück