コンパイル時正規表現(CTR)と実行時(動的)正規表現(RTR)のトピックをより理論的な方法で深く掘り下げて、他の人の回答を補足しようと思います(このトピックは、OPの質問によって間接的に暗示されていますIMHO) . 実行時の正規表現は、歴史的な理由により、よりよく知られており、人気があります (ほとんどの言語コア ライブラリの実装)。CTR とは異なり、正規表現が実行時に決定される場合は問題ありません。どちらも有限状態機械ベースで動作します。
RTRは、ある種のユニバーサル有限状態マシンによって「コンパイル」および解釈されます(ユニバーサルとは、実行時にスキームが与えられ、内部データ構造で「コンパイル」されるその種類のインタープリターを意味します-正規表現文字列を渡すと、実行時に解釈されます-時間)。
ただし、CTR はコンパイル時に「コンパイル」され、特定の正規表現に固有であるため、正規表現が実行時に指定された場合 (テキスト エディター、ファイル/インターネット検索エンジンなどのアプリケーション) は使用できません。
しかし、コンパイル時の有限状態マシンでカスタマイズされたものは、このマシンのテーブルプリセットスキームを使用したインタープリターよりも効率的であるため、アプリオリに効率的です(理論的には)(いくつかの同様のケースは、リフレクションフィールドアクセスとコンパイル時のアクセス、または特殊なそこに指摘されているように、いくつかの固定パラメータ用に最適化された関数)。もう 1 つの利点は、コンパイル時の構文チェックです。CTR は、メタプログラミングやコード生成によって実装できます。
具体的な実装については、多くの RTR がありますが、CTR はそれほど多くありません。C++ の場合は、上記の Boost および STL C++0x11 実装です。正規表現のパフォーマンス/生成されたコードのサイズ/メモリ使用量を最適化するために必要になる場合があり、主に組み込みシステムまたは高パフォーマンスの特定のアプリケーションに関連します。
CTR に関する SO の質問
CTR の実装を見つけるのは難しいです。見つかった場合の 1 つの例は、Re2C コード ジェネレーター プロジェクト、Java CTR の実装、および Regex のランタイム コンパイル (内部データ構造ではなく IL コードへの) を特徴とする C# の実装です [SO に関する質問がありますそれ]
PS申し訳ありませんが、評判のために関連するリンクを投稿できませんでした