2010-03-01 5 views
5

J'ai une tâche très intéressante, que je ne sais pas comment implémenter.Stocker des expressions régulières dans la table de base de données MySQL et les manipuler

J'ai besoin de stocker beaucoup d'expressions régulières dans une table de base de données, et doit être capable de trouver lequel d'entre eux correspond à la chaîne donnée.

Par exemple:

id | regexp 
---|------------- 
1 | ^hello world$ 
2 | ^I have [0-9] flowers& 
3 | ^some other regexp$ 
4 | ^and another (one|regexp)$ 

Et je dois trouver lequel de ces expressions correspond à la chaîne «J'ai 5 fleurs ». Bien sûr, je peux SELECT * FROM table et boucle à travers une des expressions qui les correspondent un par un en PHP, mais ce serait horrible pour le serveur à gérer. Puis-je indexer cette table ou utiliser une requête SQL spéciale pour gérer cette tâche?

J'apprécierai n'importe quelle réponse. Je vous remercie.

Répondre

11
select * from table where $your_string RLIKE regexp 

mysql regular expressions

+0

Merci, j'ai déjà utilisé RLIKE, mais je n'ai pas pensé à changer d'argument :) –

+0

Quel type d'index dois-je utiliser, pour s'adapter au mieux à cette situation? Juste indexer la colonne regexp? –

+0

Vous apprenez quelque chose de nouveau tous les jours :) –

1
SELECT * FROM table WHERE 'some stuff' REGEXP `regexp`; 

Malheureusement, il n'y a aucun moyen d'utiliser des index avec les requêtes qui utilisent des expressions rationnelles.

Questions connexes