James
Die Verwendung von Regulären Ausdrücken unter Nutzung der Rekursion ist sicher ein interessanter Ansatz. Aber es ermöglicht immer nur Teillösungen.
Dass dem so ist ergibt sich auch einfach aus der Tatsache, dass Klammerausdrücke keiner regulären Struktur unterliegen und somit RegExp hier auch schwer anzupassen ist.
Mal 2 Bsp., was mit Rekursion geht:
;== alles von erster öffnender bis zugehöriger schließender Klammer
$string = "TEST('Klammer_1': ('Klammer_2': ('Inside_2': ('In_Inside_2': 'value'))),'key_1': ('Klammer_3': ('In_Klammer_3': 'value')),'key_2': ('Klammer_4': 'value')))ENDE"
$pattern = '(\(([^()]++|(?-2))*\))'
$a = StringRegExp($string, $pattern, 3)
ConsoleWrite($a[0] & @CRLF)
;== die jeweils am tiefsten verschachtelte Klammer..
;== ..für alle Klammerausdrücke einer Ebene
;== im Muster sind in einer Ebene: 'Klammer_1', 'key_1', 'key_2'
$pattern = '\((?:(?(R)\d++|[^()]*+)|(?R))*\)'
$a= StringRegExp($string, $pattern, 3)
_ArrayDisplay($a)
Um aber z.B. alle korrespondierenden Klammerausdrücke zu erfassen, muss man dann vom Match die Klammern abschneiden und das Ergebnis wieder parsen usw.
Ich denke vom internen Zeitaufwand geht das nicht schneller als meine Form der Iteration in der Funktion.