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
    XX

    Step(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.)


Anmelden zum Antworten