特定の正規表現 (PCRE) にパスが一致するファイルを検索するプログラムで、最適化の問題に直面しています。典型的な表現は次のとおりです。
^C:\test\(a|b)\foo\bar
^C:\test\[^\\]+\foo
^C:\test\.*\foo
現在、実装は定数プレフィックス パス ("C:\test\") を検出し、このディレクトリのみを列挙し、すべてのパス名に正規表現を適用します。
最初の例を見ると、C:\test\ に 100 万個のファイルを含むフォルダー "c" が存在する可能性があります。これらのいずれも正規表現と一致する可能性はありませんが、列挙されています。したがって、ディレクトリを列挙する前に、正規表現と一致するようにパスに何かを追加できるかどうかを確認したいと思います。
一般的に言えば、特定の文字列を少なくとも1つのサフィックスと連結して特定の正規表現に一致させることができるかどうかを(効率的に)決定することは可能ですか?
3 番目の例のようなケースは最適化できないことは明らかですが、他の多くのケースでは、これにより実行時間が大幅に節約されます。
何か案は?