2010-11-24 39 views
0

Existe-t-il une sorte de collection (clé, valeur) où les valeurs peuvent être trouvées en utilisant une correspondance d'expression régulière sur la clé.Collection avec recherche RegEx .... existe-t-il

Bien sûr, je pouvais faire défiler toutes les clés et faire une correspondance, mais je me demandais si quelque chose de plus intelligent était possible.

Si non, des idées sur la façon d'accomplir cela seraient grandement appréciées.

TIA

Søren

+0

Cela serait très difficile à faire O (1) des recherches, je doute même O (logn) est impossible. O (n) est possible, mais vous pouvez aussi bien utiliser une liste. – leppie

Répondre

0

Vous pouvez utiliser un Trie structure, et marcher selon une il expression régulière simple. Cependant, il serait difficile d'adopter une bibliothèque regex existante pour ce but.

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. 

Lorsque vous atteignez la fin du motif, renvoyez tous les noeuds actuellement sélectionnés. Si le nombre de nœuds sélectionnés devient zéro, annulez et renvoyez un jeu vide.

Si vous utilisez des branches, vous devrez explorer toutes les combinaisons possibles du motif.

Une bonne lecture des expressions régulières efficaces est Russ Cox articles on the subject.