2010-03-01 12 views
5

Tengo una tarea muy interesante, que no sé cómo implementar.Almacenamiento de expresiones regulares en la tabla de la base de datos MySQL y mecanizado en su contra

Necesito almacenar muchas expresiones regulares en una tabla de base de datos, y necesito poder encontrar cuál de ellas coincide con la cadena dada.

Por ejemplo:

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

Y tengo que encontrar cuál de esas expresiones coincide cadena "tengo 5 flores". Por supuesto que puedo SELECCIONAR * FROM tabla y recorrer las expresiones que coinciden uno por uno en PHP, pero esto sería horrible para el servidor.

¿Puedo indexar de alguna manera esta tabla o utilizar una consulta SQL especial para manejar esta tarea?

Agradeceré cualquier respuesta. Gracias.

Respuesta

11
select * from table where $your_string RLIKE regexp 

mysql regular expressions

+0

Gracias, utilicé RLIKE antes, pero no pensé en cambiar argumentos :) –

+0

¿Qué tipo de índice debo usar para que se ajuste mejor a esta situación? Simplemente indexe la columna de expresiones regulares? –

+0

Aprendes algo nuevo todos los días :) –

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

Desafortunadamente, no hay manera de utilizar los índices de consultas que utilizan expresiones regulares.

Cuestiones relacionadas