原始問題尋求一個正規表示式來辨識C for 或while 迴圈一個分號。提出的解決方案利用命名捕獲組,但在循環的第三個表達式中包含函數呼叫時遇到了挑戰。
為了解決此問題,開發了一種替代方法:
# 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)
此增強型正則表達式利用SUB_STR_PATTERN 來定義可以包含函式呼叫的平衡子字串。 ||運算子用於建立邏輯 OR 條件,允許模式匹配非括號字元或嵌套平衡字串。
透過在 SUB_STR_GROUP 內重複此模式,正規表示式確保它可以符合平衡序列表達式,無論其嵌套層級為何。
這種改進的正規表示式為檢測C 提供了更強大的解決方案或while 循環以分號終止,即使在循環的第三個表達式中存在函數調用的情況下也是如此。它消除了對遞歸模式的需要,從而簡化了邏輯。
以上是我們如何改進正規表示式以可靠地檢測以分號結尾的 C for 和 While 迴圈?的詳細內容。更多資訊請關注PHP中文網其他相關文章!