Maison > développement back-end > C++ > Les expressions régulières peuvent-elles équilibrer efficacement les parenthèses ?

Les expressions régulières peuvent-elles équilibrer efficacement les parenthèses ?

Mary-Kate Olsen
Libérer: 2025-01-16 14:48:11
original
901 Les gens l'ont consulté

Can Regular Expressions Effectively Balance Parentheses?

Utiliser des expressions régulières pour valider des parenthèses équilibrées

Bien que les expressions régulières soient puissantes, équilibrer parfaitement les parenthèses en utilisant uniquement des expressions régulières est intrinsèquement difficile. Cependant, nous pouvons créer une regex qui valide efficacement les parenthèses équilibrées dans un contexte spécifique. L'approche suivante démontre une méthode :

Regex pour la validation des parenthèses :

<code>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)(?!))       # Fails if 'open' stack is not empty
\)                      # Closing parenthesis</code>
Copier après la connexion

Comment ça marche :

Cette expression régulière exploite les groupes d'équilibrage (disponibles dans de nombreux moteurs d'expression régulière, mais pas tous).

  • Groupes de capture nommés : (?<open> ( ) et (?<-open> ) ) utilisent des groupes de capture nommés. (?<open> ...) ajoute une parenthèse ouvrante correspondante à une pile nommée "open". (?<-open> ...) supprime une parenthèse fermante correspondante de la pile "ouverte".
  • Vérification conditionnelle : (?(open)(?!)) est une expression conditionnelle. Il vérifie si la pile "ouverte" est vide. S'il n'est pas vide (parenthèses déséquilibrées), la correspondance entière échoue.

Exemple :

Étant donné la chaîne d'entrée : "test -> funcPow((3),2) * (9 1)"

L'expression régulière identifie correctement "funcPow((3),2)" comme une expression de parenthèse équilibrée. Il ne correspondra pas "funcPow((3),2) * (9 1) car les parenthèses extérieures sont déséquilibrées.

Limites :

Cette expression régulière ne fonctionne que pour les parenthèses directement liées à un appel de fonction (tel que défini par func([a-zA-Z_][a-zA-Z0-9_]*)). Les appels de fonctions imbriqués entre parenthèses ne sont pas gérés. Pour un équilibrage des parenthèses vraiment robuste sur des structures imbriquées complexes, une approche non basée sur les expressions régulières (comme un algorithme basé sur une pile) est généralement nécessaire.

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