10,000 regexen eh? EricWendelinによる階層の提案は良い考えのようです。これらのregexenの巨大さを木の構造のようなものに減らすことを考えましたか?
簡単な例として、番号を必要とするすべての正規表現は、そのようなものをチェックする1つの正規表現から分岐する可能性があります。すべての正規表現は、別の分岐に1つを必要としません。このようにして、10,000ですべての比較を行う代わりに、実際の比較の数をツリーに沿ったパスまで減らすことができます。
これには、提供されたregexenをジャンルに分解する必要があります。各ジャンルには、失敗した場合に除外する共有テストがあります。このようにして、理論的には実際の比較の数を劇的に減らすことができます。
実行時にこれを行う必要がある場合は、指定された正規表現を解析して、事前定義されたジャンル(最も実行しやすい)またはその時点で生成された比較ジャンル(実行しにくい)に「ファイル」することができます。
「hello」を「[H|h]ello」および「。{0,20}ello」と比較する例は、このソリューションでは実際には役に立ちません。これが役立つ可能性のある単純なケースは次のとおりです。文字列のどこかに「ello」が存在し、テスト文字列が「さようなら」である場合にのみtrueを返す1000個のテストがある場合。「ello」で1つのテストを実行するだけで、それを必要とする1000のテストが機能しないことがわかります。このため、これらを実行する必要はありません。