Vamos a ver la función de PHP preg_match(),su funcionalidad nos permite buscar o comparar cadenas mediante expresiones regulares.
Otras funciones con que nos pueden parecer interesantes son:
- PHP strpos() y strrpos(): Buscan palabras y letras en una cadena de text.
La definicón oficial de PHP preg_match() es:
Realiza una comparación con una expresión regular
Sintaxis PHP preg_match()
Veamos la sintaxis de esta función extraída de su web oficial:
1 |
entero preg_match (exp_regular , cadena [, coincidencias[, flags [, comienzo ]]]) |
Esta es la sintaxis de la función de PHP, ahora os detallo cada uno de los parámetros:
- entero: La función devuelve un número entero. El valor será ‘1’ en caso de coincidencia, ‘0’ si no la hay, también puede devolver FALSE si hay algún error en la función.
- exp_regular (Obligatorio): Expresión regular que usaremos para la comparación.
- cadena (Obligatorio): Cadena de texto comparada.
- coincidencias (Opcional): Es un array con información de las partes de la cadena que coinciden con la expresión regular.
- flags (Opcional): Si se pasa el parametro ‘PREG_OFFSET_CAPTURE’ en el array de coincidencias también vendrá el índice de comienzo de cada coincidencia.
- comienzo (Opcional): Posición de comienzo dentro de la ‘cadena‘ de la comparación.
Hay varios caracteres que son delimitadores del patrón::
- i: Indica que el patrón de búsqueda no diferencia entre mayúsculas y minúsculas.
- b: Delimita el final de la condición estricta de un patrón, es decir, sin comparamos ‘/compara/b’ con ‘/comparador/’ la búsqueda dará FALSE.
Ejemplo de PHP preg_match() con delimitador ‘i’
Primer ejemplo con el delimitador ‘i’:
1 2 3 4 5 6 7 8 9 10 |
<?php //Demilitador 'i' para no diferenciar mayus y minus if (preg_match("/PRUEBA/i", "esto es una prueba")) { echo "HAY COINCIDENCIA"; }else { echo "NO HAY COINCIDENCIA"; } ?> |
Explico el código superior:
- Busco ‘PRUEBA’ en ‘esto es una prueba’.
- Como usamos el delimitador ‘i’ no se diferencian mayúsculas y minúsculas.
- Por lo que hay coincidencia.
Ejemplo de PHP preg_match() con delimitador ‘b’
Segundo ejemplo con el delimitador ‘b’:
1 2 3 4 5 6 7 8 9 10 |
<?php //Demilitador 'b' if (preg_match("/compara\b/", "vamos a comparar código")) { echo "HAY COINCIDENCIA"; } else { echo "NO HAY COINCIDENCIA"; } ?> |
Explico el código superior:
- Busco ‘compara’ en ‘vamos a comparar código’.
- Como usamos el delimitador ‘b’ realizamos una búsqueda estricta.
- Por lo que NO hay coincidencia, ‘compara’ no es la mismo cadena que ‘comparar’.
Ya hemos visto ejemplos con delimitadores de PHP preg_match(), probad a cambiar los ejemplos para ver el efecto contrario.
Ejemplo de búsqueda con preg_match() usando expresión regular
Tercer ejemplo usando expresión regular para que se busque al menos 2 números seguidos en la cadena:
1 2 3 4 5 6 7 8 |
//buscando al menos 2 numeros seguidos en la cadena if (preg_match('/[0-9]{2}/',"miemail22@email.com 45")) { echo "HAY COINCIDENCIA"; } else { echo "NO HAY COINCIDENCIA"; } |
Explico el código:
- Se realiza la búsqueda de 2 números seguidos en la cadena pasada.
- Se usa una expresión regular para realizar la búsqueda o comparación.
- Hay coincidencia por el ’45’. El 22 está integrado dentro de una cadena.
Ejemplo de preg_match() guardando las coincidencias en un array
Cuarto ejemplo para guardar las coincidencias en un array y mostrar su valor por pantalla:
1 2 3 4 5 6 7 8 9 10 11 12 |
//guardamos las coincidencias en un array if (preg_match('/nombre/',"nombres",$coincidencias)) { echo "HAY COINCIDENCIA<br>"; //imprimo el array en pantalla var_export ($coincidencias); //seria lo mismo que echo $coincidencias[0]; } else { echo "NO HAY COINCIDENCIA"; } |
Explico el código:
- Se realiza la búsqueda de la cadena ‘nombre’ en la cadena ‘nombres’.
- Se pasa como parámetro una variable para guardar un array con las coincidencias
- Muestro con var_export() el array con las coincidencias.
- Hay coincidencia.
Ejemplo con el parámetro flags
A continuación usamos el mismo ejemplo que el anterior pero pasando el parámetro $flags para que nos devuelva el índice del array de la ocurrencia.
1 2 3 4 5 6 7 8 9 |
//guardamos las coincidencias en un array y pasamos el parametro flags if (preg_match('/nombre/',"nombres",$coincidencias,PREG_OFFSET_CAPTURE)) { echo "HAY COINCIDENCIA<br>"; print_r ($coincidencias); } else { echo "NO HAY COINCIDENCIA"; } |
Ejemplo con el parámetro de inicio de la búsqueda
Último ejemplo pasando el parámetro $comienzo para definir el punto de partida de la comparación.
1 2 3 4 5 6 7 8 9 |
//guardamos las coincidencias en un array , pasamos el parametro flags, y decimos que empiece en el caracter 0 la comparacion if (preg_match('/nombre/',"nombres",$coincidencias,PREG_OFFSET_CAPTURE, 0)) { echo "HAY COINCIDENCIA<br>"; print_r ($coincidencias); } else { echo "NO HAY COINCIDENCIA"; } |