2010-11-24 2 views
0

キーの正規表現一致を使用して値を見つけることができるコレクション(キー、値)がありますか?RegExルックアップを持つコレクションが存在します

もちろん、すべてのキーをループして一致することもできますが、もっとスマートなことが可能かどうかは疑問でした。

もしそうでない場合は、これをどのように遂行するかについてのアイデアは非常に高く評価されます。

TIA

セーレン

+0

これはO(1)ルックアップを行うのが非常に難しく、O(logn)さえ不可能ではないかと疑います。 O(n)は可能ですが、Listを使うこともできます。 – leppie

答えて

0

あなたはTrie structureを使用し、単純な正規表現に合わせて歩くことができます。しかし、このpurpuseのために既存のregexライブラリを採用するのは難しいでしょう。

a -> select child 'a'. 
[a-z] -> select all children between 'a' and 'z', inclusive. 
. -> select all children. 
a* -> select all decendants down 'a' branches. 
a? -> select current nodes, and any 'a' children. 

パターンの最後に到達すると、現在選択されているノードをすべて返します。選択されたノードの数がゼロになると、中止して空のセットを返します。

ブランチを使用している場合、可能なすべてのパターンの組み合わせを探索する必要があります。

効率的な正規表現については、Russ Cox articles on the subjectをお読みください。

関連する問題