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.