„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Können verschachtelte Klammern ohne Rekursion oder Ausgleichsgruppen abgeglichen werden?

Können verschachtelte Klammern ohne Rekursion oder Ausgleichsgruppen abgeglichen werden?

Veröffentlicht am 06.11.2024
Durchsuche:646

Can Nested Brackets Be Matched Without Recursion or Balancing Groups?

Abgleichen verschachtelter Klammern ohne Rekursion oder Ausgleichsgruppen

Abgleichen verschachtelter Klammern mithilfe regulärer Ausdrücke kann sich als Herausforderung erweisen, insbesondere in Sprachen wie Java, in denen es zu Rekursionen kommt und Bilanzkreise werden nicht unterstützt. Glücklicherweise ist es tatsächlich möglich, diese Einschränkung mithilfe von Vorwärtsverweisen zu überwinden.

Übereinstimmende äußere Gruppen

Der folgende reguläre Ausdruck [1] stimmt mit äußeren Gruppen von überein Klammern ohne Begrenzung der Tiefe:

(?=\()(?:(?=.*?\((?!.*?\1)(.*\)(?!.*\2).*))(?=.*?\)(?!.*?\2)(.*)).) ?.*?(?=\1)[^(]*(?=\2$)

Hier sucht der Ausdruck nach öffnenden Klammern, schließt nicht übereinstimmende öffnende Klammern aus und erfasst die entsprechenden schließenden Klammern, obwohl sie nutzlos sind, dienen sie als Platzhalter, um die Übereinstimmung zu vervollständigen.

Übereinstimmende innere Gruppen

Um innere Gruppen einzubeziehen, können wir den folgenden Ausdruck erfassen [2]:

(?=\()(?=((?:(?=.*?\((?!.*?\2)(.*\)(?!.*\3).*))(?=.*?\)(?!.*?\3)(.*)).) ?.*?(?=\2)[^(]*(?=\3$))) 

Durch Hinzufügen einer Erfassungsgruppe und Durch Anpassen der Rückreferenzindizes erfasst dieser Ausdruck auch die inneren Gruppen.

So funktioniert es

Die Methode iteriert durch die Zeichenfolge und passt dabei die nächste öffnende und schließende Klammer an Erfassen der jeweils verbleibenden Zeichenfolge. Die Lookaheads sorgen dafür, dass die Klammern ausgewogen übereinstimmen.

Der Ausdruck ist wie folgt aufgebaut:

*(?=\2 $)Diese Methode ermöglicht eine effiziente Zuordnung verschachtelter Klammern, ohne dass dies erforderlich ist für Rekursion oder Bilanzkreise.
KomponenteBeschreibung
(?=()Bestätigt, dass „(“ vor komplexer Analyse steht
(?: Beginn der nicht einfangenden Gruppe für wiederholte Zeichenfolgenverarbeitung
(?=Stellen Sie sicher, dass das nächste '(' folgt
.?((?!.?\1)Übereinstimmung bis zum nächsten '(', gefolgt von Gruppe 1
(.)(?!.\2).*Füllen Sie Gruppe 1 mit der Zeichenfolge und stellen Sie sicher, dass ein weiteres „)“ vorhanden ist.
)Stellen Sie sicher, dass das passende ')' gültig ist
.?)(?!.?\2)Stellen Sie sicher, dass das nächste ')', dem nicht Gruppe 2 folgt, existiert
(.*)Füllen Sie Gruppe 2 mit der verbleibenden Zeichenfolge
)Stellen Sie sicher, dass das übereinstimmende „)“ gültig ist die Gruppe
) ?Wiederholen Sie die Gruppe (in der inneren Schleife)
.*?(?=\ 1)Übereinstimmung bis einschließlich des letzten gefundenen '('
1
Übereinstimmung bis zum letzten ')' (aber innerhalb der gültigen Gruppe)
(


    Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729740015 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
    Neuestes Tutorial Mehr>

    Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

    Copyright© 2022 湘ICP备2022001581号-3