Actualizado el 14-01-2007
versión para imprimir

Funciones PHP para expresiones regulares

PHP tiene dos conjuntos distintos de funciones relacionadas con expresiones regulares, llamadas POSIX y PCRE.

Las funciones "PCRE" son "PERL Compatible", es decir, similares a las funciones nativas Perl, aunque con ligeras diferencias. Son bastante mas poderosas que las funciones POSIX, y correlativamente mas complejas.

POSIX

Incluye seis funciones diferentes. Como nota común, pasas primero el patrón (la expresión a buscar) y como segundo argumento la cadena a comparar

ereg confronta la cadena con el patrón de búsqueda y devuelve TRUE o FALSE segun la encuentre.
eregi como la anterior, SIN distinguir entre mayusculas-minusculas


<?php
ereg 
("^am""america"); // TRUE

$es_com ereg("(\.)(com$)",$url);
// buscamos dos subpatrones en $url. El primero es
// un punto (literal) y por eso va escapado con la barra.
// el segundo subpatron también literal busca la secuencia "com"
// al final de una palabra.  

?>

ereg_replace: Busca cualquier ocurrencia del patrón en la cadena y la reemplaza por otra.
eregi_replace: como la anterior pero sin distinguir mayusculas minusculas:

patrón, reemplazo, cadena a confrontar


<?php
$cadena 
ereg_replace ("^am""hispano-am""america"); // $cadena = hispano-america
?>

split divide una cadena en piezas (que pasan a un array) usando expresiones regulares:
spliti: como el anterior, sin diferenciar Mayusculas-minusculas

Es básicamente igual que explode, pero utilizando expresiones regulares para dividir la cadena, en lugar de expresiones literales


<?php
$date 
"24-09-2003";
list(
$month$day$year) = split ('[/.-]'$date);

?>

Almacenando los resultados con ereg

Podemos pasar un patrón con subpatrones agrupados en parentesis. Si en este caso usamos ereg, podemos añadir un tercer parámetro: el nombre de un array que almacenará las ocurrencias; $array[1] contendrá la subcadena que empieza en el primer paréntesis izquierdo; $array[2] la que comienza en el segundo, etc. $array[0] contendrá una copia de la cadena.


<?php
$date 
"24-09-2003"// pasamos una fecha formato dd-mm-yyyy


if (ereg ("([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})"$date$mi_array)) {
    echo 
"$mi_array[3].$mi_array[2].$mi_array[1]"// coincide. Lo mostramos en orden inverso porque somos asi : )
} else {
    echo 
"Invalid date format: $date"// no coincide


?>

Almacenando los resultados con ereg_replace: backreferences

De forma muy similar a ereg, las funciones de búsqueda y sustitución ereg_replace y eregi_replace pueden almacenar y reutilizar subocurrencias (subpatrones encontrados en la cadena).

La principal diferencia es la forma de llamar las subocurrencias almacenadas, ya que necesitamos utilizar la barra invertida: \\0, \\1, \\2, y asi hasta un máximo de 9.
La primera referencia \\0 hace referencia a la coincidencia del patrón entero; el resto, a las sub-ocurrencias de los sub-patrones, de izquierda a derecha.

Por ejemplo vamos a usar esta capacidad para convertir una cadena que muestra una url en un enlace:


<?php
$url 
"la página ignside.net (http://www.ignside.net)";
$url ereg_replace ("(http|ftp)://(www\.)?(.+)\.(com|net|org)","<a href=\"\\0 \">\\3</a>",$url);
echo 
$url;
?>

daria como resultado:

la página ignside.net (ignside)

<< anterior pag 5 de 7      siguiente >> 
This site powered by Phorum.