Heim >Java >javaLernprogramm >Kann Regex verschachtelte Klammern ohne Rekursion oder Ausgleichsgruppen abgleichen?
Übereinstimmende verschachtelte Klammern ohne Rekursion oder Ausgleichsgruppen
Die Herausforderung:
Können Regex-Ausdrücke, wie z diejenigen in Javas java.util.regex, passen willkürlich verschachtelte Klammern an, ohne auf Rekursion oder Ausgleichsgruppen angewiesen zu sein?
Die Lösung:
Ja, es ist möglich, Vorwärtsreferenzen zu verwenden:
(?=\()(?:(?=.*?\((?!.*?)(.*\)(?!.*).*))(?=.*?\)(?!.*?)(.*)).)+?.*?(?=)[^(]*(?=$)
So funktioniert es:
Dieser Ausdruck besteht aus mehreren Lookaheads und Vorwärtsreferenzen, die zusammenarbeiten, um verschachtelte Gruppen von Klammern zu identifizieren:
Beispiel:
Die folgende Zeichenfolge stimmt mit drei verschachtelten Gruppen überein:
(F(i(r(s)t))) ((S)(e)((c)(o))(n)d) (((((((Third)))))))
Übereinstimmende innere Gruppen:
Um innere Gruppen abzugleichen, kann eine Erfassungsgruppe hinzugefügt werden bis zum Ende des Ausdrucks:
(?=\()(?=((?:(?=.*?\((?!.*?)(.*\)(?!.*).*))(?=.*?\)(?!.*?)(.*)).)+?.*?(?=)[^(]*(?=$)))
Das obige ist der detaillierte Inhalt vonKann Regex verschachtelte Klammern ohne Rekursion oder Ausgleichsgruppen abgleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!