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.
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)
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.
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!