2011-10-17 4 views
4

J'ai une fonction remove qui prend une regex comme une chaîne et une autre chaîne. Il supprime tout ce qui correspond à l'expression rationnelle de la deuxième chaîne et le renvoie.Quelle est la meilleure façon de stocker des chaînes regex dans Haskell?

En ce moment, j'appelle la fonction remove avec des chaînes regex littérale, par exemple:

remove "(my|a)?string" "Test string" -- returns "Test " 

Ce programme va se développer et il y aura beaucoup de regex de faire appel, et chacun peut être utilisé plusieurs fois tout au long du programme. Dois-je les stocker comme ceci:

myregex = "(my|a)?string" 

ou devrais-je créer un type de données ou autre chose?

Merci

Répondre

5

Une option serait d'utiliser une application partielle comme dans:

remove regex str = <generic code to remove the regex expression from string> 

Pour chaque type de regex que vous souhaitez appliquer, vous pouvez écrire une fonction comme:

removeName = remove "<name_regex>" 

et ainsi de suite. Ensuite, vous pouvez utiliser ces fonctions comme

removeName "myname" 
4

Si la performance est une préoccupation, tout regexen vous avez l'intention d'utiliser doit être compilé plusieurs fois une fois et stocké sous forme compilée. Voir aussi la documentation pour makeRegex.

Questions connexes