Maison > développement back-end > C++ > Comment puis-je utiliser des expressions régulières pour faire correspondre uniquement les parenthèses équilibrées dans une chaîne ?

Comment puis-je utiliser des expressions régulières pour faire correspondre uniquement les parenthèses équilibrées dans une chaîne ?

Linda Hamilton
Libérer: 2025-01-16 15:27:10
original
835 Les gens l'ont consulté

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

Conseils sur les expressions régulières : correspondance parfaite des parenthèses équilibrées

Dans le monde de la programmation, des parenthèses équilibrées sont cruciales pour garantir l'intégrité du code. Les expressions régulières (RegEx) fournissent un mécanisme puissant pour identifier et valider les paires de parenthèses équilibrées. Cependant, créer une expression régulière qui correspond avec précision aux parenthèses équilibrées peut s'avérer une tâche complexe.

Considérez l'expression régulière suivante :

<code>func([a-zA-Z_][a-zA-Z0-9_]*)\(.*\)</code>
Copier après la connexion

Cette expression est conçue pour correspondre à la chaîne "funcPow((3),2) * (9 1)". Idéalement, il ne devrait sélectionner que "funcPow((3),2)" ; cependant, il capture actuellement tout jusqu'à la dernière parenthèse fermante, ce qui fait que la correspondance ne se déroule pas comme prévu.

Solution pour un matching équilibré :

La résolution de ce problème nécessite une implémentation plus avancée qui tire parti de la puissance des expressions régulières : capturer les suppressions. L'expression modifiée suivante montre comment obtenir une correspondance équilibrée entre parenthèses :

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

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

    \)                      # 闭括号
", RegexOptions.IgnorePatternWhitespace);</code>
Copier après la connexion

Explication des sous-groupes d'appariement équilibrés :

La clé des brackets équilibrés réside dans les sous-groupes suivants :

  • (? ( ) : Capturez le support d'ouverture dans un groupe de capture nommé appelé "open".
  • (?<-open> ) ) : correspond au crochet fermant et supprime la capture "ouverte" correspondante.

Pas de clause de capture : (?(open)(?!))

Cette expression conditionnelle est utilisée comme mécanisme de sécurité au cas où la capture "ouverte" n'est pas vide. Si la capture « ouverte » est toujours présente, ce qui signifie qu'il existe des crochets ouverts sans correspondance, la correspondance d'expression échoue.

En combinant ces techniques, vous pouvez créer une expression régulière qui correspond avec précision aux parenthèses équilibrées et renvoie la correspondance souhaitée :

<code>"funcPow((3),2)"</code>
Copier après la connexion

Maîtrisez ces fonctionnalités avancées des expressions régulières et vous pourrez résoudre des défis complexes de traitement de chaînes comme les parenthèses équilibrées avec élégance et efficacité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal