Détection des boucles C "for" et "while" avec terminaison par un point-virgule
Correspondance des boucles C for ou while qui se terminent par un point-virgule -colon utiliser une expression régulière peut être difficile. Une approche courante consiste à créer un groupe nommé pour faire correspondre les sous-chaînes équilibrées, en garantissant que le corps entier de la boucle est contenu entre parenthèses.
Cependant, cette méthode échoue lorsque le corps de la boucle inclut un appel de fonction, rompant ainsi l'équilibre. Une approche simplifiée utilisant une fonction non regex peut résoudre ce problème.
Fonction personnalisée pour la correspondance de boucle
La fonction personnalisée suivante prend une chaîne d'entrée et recherche un for ou boucle while suivie d'un point-virgule :
def find_loop_and_semicolon(string): pos = string.find('(') + 1 open_br = 0 while open_br >= 0: char = string[pos] if char == '(': open_br += 1 elif char == ')': open_br -= 1 pos += 1 return pos if open_br == 0 and string[pos] == ';' else -1
La fonction :
Utilisation
string = "for (int i = 0; i < 10; doSomethingTo(i));" result = find_loop_and_semicolon(string) if result != -1: print("Loop found and terminated with a semi-colon.") else: print("No matching loop found.")
Avantages
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!