Heim >Backend-Entwicklung >C++ >Wie kann ich reguläre Ausdrücke verwenden, um nur ausgeglichene Klammern in einer Zeichenfolge zu finden?

Wie kann ich reguläre Ausdrücke verwenden, um nur ausgeglichene Klammern in einer Zeichenfolge zu finden?

Linda Hamilton
Linda HamiltonOriginal
2025-01-16 15:27:10837Durchsuche

How Can I Use Regular Expressions to Match Only Balanced Parentheses in a String?

Tipps für reguläre Ausdrücke: Perfekte Zuordnung ausgeglichener Klammern

In der Welt der Programmierung sind ausgewogene Klammern entscheidend, um die Codeintegrität sicherzustellen. Reguläre Ausdrücke (RegEx) bieten einen leistungsstarken Mechanismus zum Identifizieren und Validieren ausgeglichener Klammerpaare. Allerdings kann es eine komplexe Aufgabe sein, einen regulären Ausdruck zu erstellen, der ausgeglichene Klammern genau abgleicht.

Betrachten Sie den folgenden regulären Ausdruck:

<code>func([a-zA-Z_][a-zA-Z0-9_]*)\(.*\)</code>

Dieser Ausdruck ist so konzipiert, dass er mit der Zeichenfolge „funcPow((3),2) * (9 1)“ übereinstimmt. Im Idealfall sollte nur „funcPow((3),2)“ ausgewählt werden. Derzeit wird jedoch alles bis zur letzten schließenden Klammer erfasst, sodass die Übereinstimmung nicht wie erwartet ausfällt.

Lösung für ausgewogenes Matching:

Um dieses Problem zu lösen, ist eine fortgeschrittenere Implementierung erforderlich, die die Leistungsfähigkeit regulärer Ausdrücke nutzt – das Erfassen von Löschungen. Der folgende modifizierte Ausdruck zeigt, wie eine ausgewogene Klammerübereinstimmung erreicht wird:

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

    \(                      # 开括号
        (?:                 
        [^()]               # 匹配所有非括号字符
        |
        (?<open> \( )       # 匹配'(', 并捕获到名为'open'的组中
        |
        (?<-open> \) )      # 匹配')', 并删除'open'组中的相应捕获
        )+
        (?(open)(?!))       # 如果'open'堆栈不为空,则匹配失败

    \)                      # 闭括号
", RegexOptions.IgnorePatternWhitespace);</code>

Erklärung ausgewogener passender Untergruppen:

Der Schlüssel zu ausgewogenen Klammern liegt in den folgenden Untergruppen:

  • (? ( ): Erfassen Sie die öffnende Klammer in einer benannten Erfassungsgruppe namens „open“.
  • (?<-open> ) ): Entspricht der schließenden Klammer und entfernt die entsprechende „offene“ Erfassung.

Keine Erfassungsklausel: (?(offen)(?!))

Dieser bedingte Ausdruck wird als Sicherheitsmechanismus für den Fall verwendet, dass die „offene“ Erfassung nicht leer ist. Wenn die „offene“ Erfassung noch vorhanden ist, was bedeutet, dass nicht übereinstimmende offene Klammern vorhanden sind, schlägt der Ausdrucksabgleich fehl.

Durch die Kombination dieser Techniken können Sie einen regulären Ausdruck erstellen, der ausgeglichene Klammern genau übereinstimmt und die gewünschte Übereinstimmung zurückgibt:

<code>"funcPow((3),2)"</code>

Beherrschen Sie diese erweiterten Funktionen regulärer Ausdrücke und lösen Sie komplexe Herausforderungen bei der Zeichenfolgenverarbeitung wie ausgewogene Klammern elegant und effizient.

Das obige ist der detaillierte Inhalt vonWie kann ich reguläre Ausdrücke verwenden, um nur ausgeglichene Klammern in einer Zeichenfolge zu finden?. 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