Heim >Backend-Entwicklung >C++ >Wie können wir reguläre Ausdrücke verbessern, um C-For- und While-Schleifen, die mit Semikolons enden, zuverlässig zu erkennen?

Wie können wir reguläre Ausdrücke verbessern, um C-For- und While-Schleifen, die mit Semikolons enden, zuverlässig zu erkennen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-15 03:41:13473Durchsuche

How Can We Improve Regular Expressions to Reliably Detect C   For and While Loops Ending with Semicolons?

Verbesserung des regulären Ausdrucks für die C-Schleifenerkennung mit Semikolon

Einführung

Die ursprüngliche Frage suchte nach einem regulären Ausdruck zur Identifizierung von C-for- oder while-Schleifen, die mit enden ein Semikolon. Eine vorgeschlagene Lösung nutzte benannte Erfassungsgruppen, stieß jedoch auf Probleme, wenn Funktionsaufrufe in den dritten Ausdruck der Schleife einbezogen wurden.

Erweiterter regulärer Ausdruck

Um dieses Problem zu lösen, wurde ein alternativer Ansatz entwickelt:

# match any line that begins with a "for" or "while" statement:
REGEX_STR = r"^\s*(for|while)\s*\("

# match a balanced substring, accounting for function calls within expressions:
SUB_STR_PATTERN = r"([^\(\)]|(\([^\(\)]*(?:\|\|[^()\s]*(?1))*?\)))"

# match a balanced string of arbitrary length, including function calls:
SUB_STR_GROUP = f"(?P<balanced>{SUB_STR_PATTERN})+"

# match the initial opening parenthesis, followed by balanced expressions, and finally the closing parenthesis.
REGEX_STR += f"{SUB_STR_GROUP}\)\s*;\s*"

# compile the regex object with MULTILINE and VERBOSE flags for readability
REGEX_OBJ = re.compile(REGEX_STR, re.MULTILINE | re.VERBOSE)

Erklärung

Dieser erweiterte reguläre Ausdruck nutzt SUB_STR_PATTERN, um eine ausgewogene Teilzeichenfolge zu definieren kann Funktionsaufrufe enthalten. Das || Der Operator wird verwendet, um eine logische ODER-Bedingung zu erstellen, die es dem Muster ermöglicht, entweder nicht in Klammern stehende Zeichen oder verschachtelte ausgeglichene Zeichenfolgen abzugleichen.

Durch die Wiederholung dieses Musters innerhalb der SUB_STR_GROUP stellt die Regex sicher, dass sie mit einer Folge ausgeglichener Zeichen übereinstimmen kann Ausdrücke, unabhängig von ihrer Verschachtelungsebene.

Schlussfolgerung

Dieser verbesserte reguläre Ausdruck bietet eine robustere Lösung für die Erkennung von C für oder while-Schleifen werden mit einem Semikolon beendet, auch wenn im dritten Ausdruck der Schleife Funktionsaufrufe vorhanden sind. Es vereinfacht die Logik, indem rekursive Muster überflüssig werden.

Das obige ist der detaillierte Inhalt vonWie können wir reguläre Ausdrücke verbessern, um C-For- und While-Schleifen, die mit Semikolons enden, zuverlässig zu erkennen?. 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