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
Freigeben: 2025-01-16 15:27:10
Original
835 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage