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 ?
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>
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>
Explication des sous-groupes d'appariement équilibrés :
La clé des brackets équilibrés réside dans les sous-groupes suivants :
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>
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!