Crear un buscador con MySQL, PHP y expresiones regulares
el abril 12, 2010 en Tutriales
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.

JAMES a dicho en octubre 11, 2011
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..
Kalvin Manson a dicho en octubre 12, 2011
no, he visto algunas funciones similares con ajax pero esa expresión como tal no la tengo.