Funciones para manejar expresiones regulares

La función básica relacionada con las expresiones regulares PCRE que usa para comparar una cadena con un patrón, es **preg_match()**. La diferencia entre ellas es que ** ereg()** distingue entre mayúsculas y minúsculas y **eregi()** no. Estas funciones comprueban si una cadena pasada como parámetro cumple un patrón y devuelven el valor 1 (verdadero) o 0 (falso). Los argumentos de las funciones pueden ser cadenas o variables que contengan cadenas. Si el patrón es la cadena vacía, las funciones devuelven error.

La definición de la función ereg() es la siguiente:

int preg_match(string patron, string cadena[,array regs])

Veamos un ejemplo. El siguiente fragmento de código comprueba si la una fecha está formato ISO (AAAA-MM-DD).

<?php
   $fecha = "2016-10-01";
   if (ereg("ˆ([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})$", $fecha))
      echo "Formato de fecha correcto";
   else
      echo "Formato de fecha no valido";
?>

La función de expresiones regulares compatibles con PCRE es

int preg_match($patron, $cadena[,&$matriz_coincidencias, [,$modificadores [,$desplazamiento] ] ])

que compara una cadena con un patrón y devuelve 1 si el patrón ha coincidido o 0 si no. La primera coincidencia encontrada se puede guardar en el argumento opcional $matriz\_coincidencias y, si se añade el modificador **PREG_OFFSET_CAPTURE** , se guarda también en el argumento opcional **$matriz\_coincidencias** la posición de la coincidencia encontrada. El argumento opcional **$desplazamiento** es un número que permite indicar en qué carácter se inicia la búsqueda.

Una diferencia importante entre las funciones compatibles con POSIX y PCRE es que los patrones deben empezar y acabar con el carácter / (barra).

<?php
   $fecha = ;
   if( preg_match("/ˆ([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})$/", $fecha) )
      echo "Formato de fecha correcto";
   else
      echo "Formato de fecha no valido";
?>

En caso de que la barra forme parte del patrón, se puede:

  • escribir en el patrón la barra precedida de una contrabarra (\/)

  • utilizar otro carácter, que no sea uno de los caracteres especiales, como delimitador (por ejemplo, !, -, etc.)

La función **preg_match()** distingue entre mayúsculas y minúsculas. Para que no distinga, debe añadirse el modificador (sin comillas) al final del patrón. Este modificador no afecta a las clases [[::]].

Veamos dos ejemplos:

<?php
   $cadena = "aaAA";
   $patron1 = "/ˆ[a-z]+$/";
   $patron2 = "/ˆ[a-z]+$/i";
   if (preg_match($patron1, $cadena)) {
      print "<p>La cadena $cadena son solo letras minusculas.</p>\n";
   } else {
      print "<p>La cadena $cadena no son solo letras minusculas.</p>\n";
   }
   if (preg_match($patron2, $cadena)) {
      print "<p>La cadena $cadena son solo letras minusculas.</p>\n";
   } else {
      print "<p>La cadena $cadena no son solo letras miusculas.</p>\n";
   }
?>

La solución de este ejemplo será:

La cadena aaAA no son sólo letras minúsculas.
La cadena aaAA son sólo letras minúsculas.

results matching ""

    No results matching ""