Ich arbeite gerade an einem Parser für mein Programm. Der Parser analysiert Code, der JSON ähnlich ist, möchte aber keinen JSON-Parser verwenden. Es ist zwingend erforderlich, dass ich meinen eigenen Parser und keinen Parser von Drittanbietern verwende. Es verwendet geschweifte Klammern, um "Mengen" einzufügen.Regex, um Text zwischen geschweiften Klammern zu erhalten
Dies ist mein derzeitiger Regex-Code im Moment.
\\{(\\s*)+(.*?)(\\s*)+\\}
Ein Beispiel Ein- und Ausgabe wäre:
Eingang: {value, value2}
Ausgang: value, value2
Nun, dies funktioniert gut, aber wenn ich will in den anderen Satz setzen Eingabe:
Eingabe: {value, {value2}}
Output: value, {value2 }<-Outermost curly bracket
Die äußerste geschweifte Klammer wird zurückgelassenen weil die Schließ geschweifte Klammer aus dem eingebetteten Satz eines Teil des Musters wird.
Ich mag auch in der Lage sein, andere Sätze in dem Eingang zu setzen:
Eingang: {value, value2} {value3, value4}
(Gesucht) Ausgabe: value, value2 value3, value4
Dies macht $
am Ende des Regex mit praktisch nutzlos.
Dieses '{(\ s *) + (. *?) (\ S *) +}' ist ein schlechter Weg, es zu tun. Wenn das Alles-Setzen-Flag gesetzt ist, ist das "\ s" redundant. Wenn das Alles-Punkt-Flag _NOT_ gesetzt ist, wird dieses ". *?" Nur 1 Zeile erlauben, bevor es optionale Leerzeichen erwartet, dann '}'. Irgendwie besiegt den Zweck, es sei denn, du versuchst nur 1 Linie zu entsprechen. – sln
Regex in Java unterstützt keine Rekursion, sodass Sie sie nicht zum Parsen verschachtelter Strukturen verwenden können. – Pshemo
Verwenden Sie die rekursiven Funktionsaufrufe der nativen Java-Sprache, und verwalten Sie Ihre eigenen Klammern. Regex in Java kommt nicht in Frage. Fordern Sie ein Upgrade an. – sln