元の質問では、次で終了する C の for または while ループを識別するための正規表現を求めていました。セミコロン。提案されたソリューションでは、名前付きキャプチャ グループを利用していましたが、関数呼び出しがループの 3 番目の式に含まれているときに問題が発生しました。
この問題を解決するために、別のアプローチが開発されました。
# 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 内でこのパターンを繰り返すことにより、正規表現はバランスの取れた文字列と一致することを保証します。
この改良された正規表現は、より堅牢なソリューションを提供します。ループの 3 番目の式内に関数呼び出しが存在する場合でも、セミコロンで終了する C の for または while ループを検出します。再帰パターンの必要性を排除することでロジックを簡素化します。
以上がセミコロンで終わる C の For および While ループを確実に検出するために正規表現を改善するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。