Heim >Backend-Entwicklung >C++ >Kann ein regulärer Ausdruck ordnungsgemäß mit Semikolons terminierte C-For- und While-Schleifen zuverlässig identifizieren?

Kann ein regulärer Ausdruck ordnungsgemäß mit Semikolons terminierte C-For- und While-Schleifen zuverlässig identifizieren?

Barbara Streisand
Barbara StreisandOriginal
2024-12-15 04:33:13603Durchsuche

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

Reguläre Ausdrücke für durch Semikolons terminierte C-For- und While-Schleifen

Herausforderung: Erstellen eines regulären Ausdrucks, der Folgendes unterscheidet:

  • Korrekt abgeschlossene C-for- oder while-Schleifen mit Semikolons (;)
  • Schleifen ohne Semikolon-Abschluss

Erster Versuch:

Der bereitgestellte anfängliche reguläre Ausdruck erkennt effektiv ausgeglichene Klammern darin for/while-Anweisungen. Es gibt jedoch Probleme, wenn der Schleifenausdruck Funktionsaufrufe enthält.

^\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*

Überarbeiteter Ansatz:

Die vorgeschlagene Lösung weicht von einem Regex-basierten Ansatz ab. Stattdessen wird eine vereinfachte Routine verwendet:

  1. Pos wird mit dem Zeichen vor der öffnenden Klammer der for/while-Anweisung initialisiert.
  2. Erstellt einen openBr-Zähler mit einem Anfangswert von 0.
  3. Durchlaufen Sie die Zeichenfolge, erhöhen Sie pos und erhöhen/verringern Sie openBr basierend auf dem Vorkommen Klammern.
  4. Iteration beenden, wenn openBr auf 0 zurückkehrt.
  5. Überprüfen Sie, ob unmittelbar nach der schließenden Klammer in Schritt 4 ein Semikolon vorhanden ist.

Vorteile :

  • Einfachheit und Klarheit
  • Keine Abhängigkeit von komplexen regulären Ausdrücken
  • Fähigkeit, Schleifen mit Ausdrücken zu verarbeiten, die Funktionsaufrufe enthalten

Das obige ist der detaillierte Inhalt vonKann ein regulärer Ausdruck ordnungsgemäß mit Semikolons terminierte C-For- und While-Schleifen zuverlässig identifizieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn