Heim >Backend-Entwicklung >C++ >Wie können reguläre Ausdrücke ausgeglichene Klammern innerhalb eines bestimmten Funktionsaufrufs genau abgleichen?

Wie können reguläre Ausdrücke ausgeglichene Klammern innerhalb eines bestimmten Funktionsaufrufs genau abgleichen?

Susan Sarandon
Susan SarandonOriginal
2025-01-16 15:17:13547Durchsuche

How Can Regular Expressions Accurately Match Balanced Parentheses Within a Specific Function Call?

Reguläre Ausdrücke für präzises, ausgeglichenes Klammerabgleichen

Dieser Artikel befasst sich mit der Herausforderung, ausgeglichene Klammern mithilfe regulärer Ausdrücke genau abzugleichen, insbesondere im Kontext eines Funktionsaufrufs (z. B. funcPow). Standardmäßige Regex-Ansätze können den Abgleich oft nicht auf den Umfang des gewünschten Funktionsaufrufs beschränken.

Die Lösung liegt in einer fortgeschritteneren Regex-Technik. Der folgende Ausdruck verwendet benannte Erfassungsgruppen und Ausgleichsgruppenkonstrukte, um eine präzise Übereinstimmung zu erreichen:

<code>var r = new Regex(@"
    func([a-zA-Z_][a-zA-Z0-9_]*)  # Function name

    \(                          # Opening parenthesis
        (?:                     
        [^()]                   # Match any character except parentheses
        |
        (?<open> \( )           # Match opening parenthesis, add to 'open' stack
        |
        (?<-open> \) )          # Match closing parenthesis, remove from 'open' stack
        )+
        (?(open)(?!))           # Assertion: 'open' stack must be empty
    \)                          # Closing parenthesis
", RegexOptions.IgnorePatternWhitespace);</code>

Diese Regex verwendet einen Ausgleichsgruppenmechanismus. (?<open> ( ) fügt einer benannten Capture-Gruppe „open“ eine öffnende Klammer hinzu und verhält sich wie ein Stapel. (?<-open> ) ) entfernt für jede gefundene schließende Klammer eine Klammer aus dem „offenen“ Stapel. Die Bedingung (?(open)(?!)) stellt sicher, dass die Übereinstimmung fehlschlägt, wenn der Stapel („offen“) am Ende nicht leer ist, und sorgt so für ausgeglichene Klammern innerhalb des Funktionsaufrufs. Dieser Ansatz beschränkt die Übereinstimmung effektiv auf den beabsichtigten Funktionsaufruf.

Das obige ist der detaillierte Inhalt vonWie können reguläre Ausdrücke ausgeglichene Klammern innerhalb eines bestimmten Funktionsaufrufs genau abgleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn