PHP preg_match(): buscar o comparar cadenas con expresiones regulares

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:

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:

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’:

<?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’:

<?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:

//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:

//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.

//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.

//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";
  }
compartir
Publicado por
Aner Barrena