Regex nestet brackets
-
Hallo Leute ich hab folgende Zeichenketten hab, welche is spillten möchste durch kommas, allerding sollten nestet brackets berücksichtig werden.. wie mach ich das am besten in regex?
Step(1)
[XX,XX,[XX,[XX,XX,XX],XX,XX],[XX,XX],XX]XX,
XX,
[XX,[XX,XX,XX],XX,XX],
XX
[XX,XX]Step(2)
[XX,[XX,XX,XX],XX,XX],XX,
[XX,XX,XX],
XX
XXStep(3)
[XX,XX,XX],XX,
XX,
XX
-
Sorry da muss ich passen. Fällt das nicht schon unter die Limitierungen von Regex... ? Soweit ich weiß gibts keine Möglichkeit das zu beschreiben, da bist du mit nem Kellerautomat besser bedient, sollte auch recht simpel zu programmieren sein.
Start = Schachtelung Schachtelung = "[" Statement "]" Statement = Schachtelung "," Statement | "XX" "," Statement | "XX" | Schachtelung
Sollt eine passende, eindeutige Grammatik dafür sein. Wenn ich mich nicht vertan habe...
-
Hey shadow,
sorry, das war vll. etwas blöd erklärt, ich will keine rekusives regex pattern, ich möchte eig. nur diese funktion mit regex erstezen!
private String[] ParameterSplit(String scr) throws Exception { char delimiter = ','; List<String> parts = new ArrayList<String>(); String part = ""; int level = 0; for (char it : scr.toCharArray()) { if (it == '[') level++; if (it == ']') level--; part += it; if (it == delimiter && level == 0) { parts.add(part); part = ""; } } if (level != 0) throw new Exception("Error parsing: Missing '" + (level > 0 ? "]" : "[") + "'"); return parts.toArray(new String[parts.size()]); }
Aber dafür müsste ich die brackets "zählen" können , geht sowas in regex (siehe das level in der funktion)
Grüße und Danke
-
Wie gesagt, ich wüsste nicht wie. Aber warum muss es denn unbedingt Regex sein ?
-
Hey, ne muss es nicht .. hab halt in dem projekt was parsing angeht alles mit regex gemacht.. und das wäre dann ne ausnahme.. ich mag keine ausnahmen;)
Muss ich wohl doch die Funktion nehmen;)
P.S. gibt es keine möglichkeit irgendwelceh vorkommen von zeichen in regex zu zählen?
-
Naja die Anzahl der Matches. aber wie unterscheidest du ob sie in einer anderen Klammer sind oder nicht ?
-
Was du willst, geht nicht. Es gibt keinen regulären Ausdruck um 'ausgewogene Klammern' zu beschreiben, ganz einfach weil das keine reguläre Sprache ist.
Denk mal drüber nach: wie willst du das auch mit einer endlichen Anzahl an Zuständen/Speicher machen können?
Ganz natürlich geht das in der Tat mit einem Stack.
hab halt in dem projekt was parsing angeht alles mit regex gemacht.
Das hört sich schlimm an.
-
Es handelt sich aber nicht ernsthaft um deine Programmiersprache für die SPS aus dem anderen Thread, die du mit regulären Ausdrücken "parst"?
ARGH.
-
nein nein nein schrieb:
Es handelt sich aber nicht ernsthaft um deine Programmiersprache für die SPS aus dem anderen Thread, die du mit regulären Ausdrücken "parst"?
ARGH.*lach*
(glaube, heute habe ich deswegen den ganzen tag ein dümmliches lächeln im gesicht.)