Maison >développement back-end >C++ >Une expression régulière peut-elle identifier de manière fiable les boucles C For et While terminées par un point-virgule ?

Une expression régulière peut-elle identifier de manière fiable les boucles C For et While terminées par un point-virgule ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-15 04:33:13608parcourir

Can a Regular Expression Reliably Identify Properly Semi-Colon Terminated C   For and While Loops?

Expressions régulières pour les boucles For et While en C terminées par un point-virgule

Défi : Créer une expression régulière qui fait la distinction entre :

  • Boucles C for ou while terminées correctement avec des points-virgules (;)
  • Boucles dépourvues de terminaison par point-virgule

Tentative initiale :

L'expression régulière initiale fournie détecte efficacement les parenthèses équilibrées à l'intérieur pour/pendant les déclarations. Cependant, cela rencontre des difficultés lorsque l'expression de boucle contient des appels de fonction.

^\s*(for|while)\s*
\(  # match the initial opening parenthesis
    (?P<balanced>
        [^()]
        |
        \( (?P=balanced)* \)
    )*  # Look for a sequence of balanced substrings
\)  # Finally, the outer closing parenthesis.
\s*;\s*

Approche révisée :

La résolution suggérée s'écarte d'une approche basée sur les expressions régulières. Au lieu de cela, il utilise une routine simpliste :

  1. Initialisez pos au caractère avant la parenthèse ouvrante de l'instruction for/while.
  2. Établissez un compteur openBr avec une valeur initiale de 0.
  3. Parcourir la chaîne, en incrémentant pos et en incrémentant/décrémentant openBr en fonction de la rencontre parenthèses.
  4. Terminez l'itération lorsque openBr revient à 0.
  5. Vérifiez si un point-virgule existe immédiatement après la parenthèse fermante trouvée à l'étape 4.

Avantages :

  • Simplicité et clarté
  • Aucune dépendance à l'égard d'expressions régulières complexes
  • Capacité à gérer des boucles avec des expressions contenant des appels de fonction

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