ホームページ >バックエンド開発 >C++ >正規表現はセミコロンで終了する C の For および While ループを確実に識別できますか?

正規表現はセミコロンで終了する C の For および While ループを確実に識別できますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-15 04:33:13605ブラウズ

Can a Regular Expression Reliably Identify Properly Semi-Colon Terminated C   For and While Loops?

セミコロンで終わる C の For ループと While ループの正規表現

課題: 以下を区別する正規表現の作成:

  • C の for または while ループをセミコロンで適切に終了する(;)
  • セミコロン終了のないループ

初期試行:

提供された初期正規表現は、内部のバランスの取れた括弧を効果的に検出します。 for/while ステートメント。ただし、ループ式に関数呼び出しが含まれている場合は問題が発生します。

^\s*(for|while)\s*
\(  # match the initial opening parenthesis
    (?P<balanced>
        [^()]
        |
        \( (?P=balanced)* \)
    )*  # Look for a sequence of balanced substrings
\)  # Finally, the outer closing parenthesis.
\s*;\s*

修正されたアプローチ:

提案された解決策は、正規表現ベースのアプローチから逸脱しています。代わりに、

  1. for/while ステートメントの開き括弧の前の文字に pos を初期化します。
  2. 初期値 0 で openBr カウンターを確立します。
  3. 文字列を反復処理し、発生した文字列に基づいて pos を増分し、openBr を増分/減分します。
  4. openBr が 0 に戻ったら反復を終了します。
  5. 手順 4 で見つかった右括弧の直後にセミコロンが存在するかどうかを確認します。

利点:

  • シンプルさ明確性
  • 複雑な正規表現に依存しない
  • 関数呼び出しを含む式を使用してループを処理できる

以上が正規表現はセミコロンで終了する C の For および While ループを確実に識別できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。