Maison >développement back-end >C++ >Comment les expressions régulières peuvent-elles correspondre avec précision aux parenthèses équilibrées dans un appel de fonction spécifique ?

Comment les expressions régulières peuvent-elles correspondre avec précision aux parenthèses équilibrées dans un appel de fonction spécifique ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-16 15:17:13546parcourir

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

Expressions régulières pour une correspondance précise des parenthèses équilibrées

Cet article aborde le défi de faire correspondre avec précision des parenthèses équilibrées à l'aide d'expressions régulières, en particulier dans le contexte d'un appel de fonction (par exemple, funcPow). Les approches regex standard ne parviennent souvent pas à limiter la correspondance à la portée de l'appel de fonction souhaité.

La solution réside dans une technique de regex plus avancée. L'expression suivante utilise des groupes de capture nommés et des constructions de groupes d'équilibrage pour obtenir une correspondance précise :

<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>

Cette expression régulière utilise un mécanisme de groupe d'équilibrage. (?<open> ( ) ajoute une parenthèse ouvrante à un groupe de capture nommé « open », agissant comme une pile. (?<-open> ) ) supprime une parenthèse de la pile "ouverte" pour chaque parenthèse fermante rencontrée. Le conditionnel (?(open)(?!)) garantit que la correspondance échoue si la pile ("open") n'est pas vide à la fin, garantissant des parenthèses équilibrées dans l'appel de fonction. Cette approche restreint effectivement la correspondance à l'appel de fonction prévu.

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!

Déclaration:
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