ファイルを含むネストされたディレクトリのように、それぞれに名前が含まれるネストされたハッシュのツリーがあります。実行時に外部から提供された正規表現を取得した場合 (これは分析したくありません)、どのサブツリーで一致を探すかをどのように見つけることができますか。一致するパスは、次の形式である可能性があります
"$x{name}/$x{subdir}{name}/$x{subdir}{subdir}{name}"
ただし、何千ものハッシュが存在する可能性があるため、これらの両方が部分的に一致する場合にのみ試してみたいと思います。
"$x{name}"
"$x{name}/$x{subdir}{name}"
/\G.../g
またはさらに良いことに、最初の部分が一致する場合は、正規表現が別の場所から 1 つにまとめられていることを除いて、2 番目の部分を直接続行し、次に 3 番目の部分を続行しようとします。また、部分的に一致する他のすべてのサブディレクトリも調べるには、バックトラックが必要です。
PCRE g_match_info_is_partial_matchはまさに私が探しているものに聞こえますが、その名前に「Perl」が含まれているにもかかわらず、5.18 ソースでさえこれが含まれていないようです。そして、実際には 5.8.0 との下位互換性が必要です。
この質問の背景は、正規表現構文をmakeppに導入することです。基本的にはパターンに対してこれを行いますが、単純な構文のため、それは簡単です。見つかったファイルをキャッシュし、より多くのファイルが表示されると処理できることに注意してください。これにより、ルールの出力もツリーに配置されるため、makepp は後でビルドされる可能性のあるファイルに一致させることができます。