Crear un buscador con MySQL, PHP y expresiones regulares
abril 12, 2010 en Tutriales por Kalvin Manson
Este tutorial explica de una manera sencilla como hacer un buscador o simplemente realizar una consulta MySQL usando PHP, MySQL y expresiones regulares. Aunque muchos ya habrán visto tutoriales de como hacerlo usando LIKE y comodines “%” o el mas complejo MATCH AGAINTS hoy vy a explicar como usando una función regular podemos obtener resultados de frases completas sin importar la cantidad de caracteres que se interponen entre ellas.
Antes que nada vamos a definir nuestra tabla MySQL solo como ejemplo.
id titulo cotenido 1 Lorem ipsum Lorem ipsum dolor sit 2 nuevo tiulo contenido para el id 2
Suponiendo que ya saben usar PHP y MySQL simultáneamente me saltare el paso de explicar conexiones con bases de datos y cosas similares, me centrare en la consulta y en la explicación.
En el modo tradicional “LIKE” se busca la coinsidencia en las columnas y agregandoles los comodines “%” podemos hacer que funciones perfecto con busqueda de palabras.
$q = “ipsum”;
WHERE titulo LIKE ‘%$q%’
//funciona resultado id 1
De esta manera funciona perfecto pero normalmente la sbusquedas se hacen con frases no con palabras y es donde el LIKE nos da problemas:
$q = ”contenido 2″;
WHERE contenido LIKE ‘%$q%’
//no funciona
Como verán, asi no se muestran resultados pues el LIKE busca la frase exacta en cualquier parte del campo contenido, y aunque en el id se encuentran las dos palabras de la búsqueda debido a que no están seguidas como oración no lo reconoce.
Ahora si vamos con la Expresión Regular:
$espacio = ” “;$q = “contenido 2″;$q = str_replace($espacio, “(.*)”, $q);WHERE contenido REGEXP ‘$q’
//funciona resultado id 2′
Como ven simplemente utilizamos la funcion regular generada para que en la busqueda no importe la cantidad de caracteres antes de la frase, o despues de la frase o ENTRE PALABRAS.
Se que muchos piensan que es mejor utilizar un explode para generar un array a partir de las palabras y pasarlas una por una a la consulta, pero esta función regular esta pensada para consultas con JOINS y demás atributos donde buscas la sensilles para mostrar un contenido.

Hola, quería saber si tienes una expresión regular para la consulta que hiciste pero que también me tome las palabras por decir:
si busco por decir loewe si alguien pone “loeve” o pone “lowe” que también salga. loewe, o si es por decir “Adolfo Dominguez” si alguien pone “Hadolfo Domínguez” que también salgan
si tienes una expresión que me sirva te daria las gracias.
saludos..
no, he visto algunas funciones similares con ajax pero esa expresión como tal no la tengo.