首頁 >後端開發 >C++ >我們如何改進正規表示式以可靠地檢測以分號結尾的 C for 和 While 迴圈?

我們如何改進正規表示式以可靠地檢測以分號結尾的 C for 和 While 迴圈?

Barbara Streisand
Barbara Streisand原創
2024-12-15 03:41:13477瀏覽

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

使用分號改進C 循環偵測的正規表示式

簡介

原始問題尋求一個正規表示式來辨識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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn