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