Sustituir subcadenas con expresiones regulares

También usaremos expresiones regulares para buscar y reemplazar subcadenas de las misma forma que se utiliza **str_replace()**. Las dos funciones disponibles que usan expresiones regulares estilo POSIX para realizar esta operación son **ereg_replace()** y **eregi_replace()**.

Esta es la definición de la función ereg_replace():

string ereg_replace(string patron, string sustitucion, string busqueda)

Esta función busca la expresión regular patrón en la cadena búsqueda y la reemplaza por la cadena sustitución. Devuelve la cadena modificada. Si no hay coincidencias que reemplazar, devuelve la cadena original. La función **eregi_replace()** es idéntica con la diferencia de que no discrimina entre mayúsculas y minúsculas.

<?php
   $texto = "[email protected], www.google.cOm, http://www.ua.ES";
   $texto = eregi_replace('(net)|(com)|(es)|(org)','dominio',$texto);
   echo $texto; //[email protected], www.google.dominio, http://www.ua.dominio
?>

La función que realiza la misma tarea pero usando un patrón con una expresión regular estilo PCRE es la siguiente:

mixed preg_replace( mixed $patron , mixed $sustitucion, mixed $asunto [, int $limite [,int &$conteo]] )

La cual busca la expresión regular **patrón** en la cadena asunto y la reemplaza por la cadena **sustitución**. Devuelve la cadena modificada. Si no hay coincidencias que reemplazar, devuelve la cadena original.

Veamos un ejemplo:

$texto = "[email protected], www.google.com, http://www.ua.ES";
echo preg_replace('/(net)|(com)|(es)|(org)/','dominio',$texto);
//[email protected], www.google.dominio, http://www.ua.ES
echo "<hr>";
echo preg_replace('/(net)|(com)|(es)|(org)/i','dominio',$texto);
//[email protected], www.google.dominio, http://www.ua.dominio

Los patrones compatibles con PCRE admiten en general los patrones POSIX extendidos comentados en el apartado anterior, con una diferencia muy importante que es que las clases que incluyen caracteres alfabéticos ([[:alnum:]], [[:alpha:]], etc.) en POSIX no incluyen vocales acentuadas, ñ, á, etc, mientras que en PCRE sí.

En la tabla que aparece a continuación podemos ver las clases compatibles con PCRE.

Clases compatibles con estilo PCRE
Patrón Significado
[[:alnum:]] cualquier letra o dígito (incluidas vocales acentuadas, ñ, ç, etc.)
[[:alpha:]] cualquier letra (incluidas vocales acentuadas, ñ, ç, etc.)
[[:ascii:]] caracteres con código ASCII de 0 a 127
[[:blank:]] espacios o tabuladores
[[:cntrl:]] caracteres de control
[[:graph:]] caracteres de impresión, salvo el espacio
[[:lower:]] cualquier letra minúscula (incluidas vocales acentuadas, ñ, ç, etc.)
[[:print:]] caracteres de impresión, espacio incluido
[[:upper:]] cualquier letra mayúscula (incluidas vocales acentuadas, ñ, ç, etc.)
[[:word:]] cualquier letra o dígito y el guión bajo (incluidas vocales acentuadas, ñ, ç, etc.)
[[:xdigit:]] cualquier dígito hexadecimal
\w cualquier letra o dígito y el guión bajo (incluidas vocales acentuadas, ñ, ç, etc.)
\W cualquier cosa que no sea letra o dígito y el guión bajo (incluidas vocales acentuadas, ñ, ç, etc.)
\s cualquier espacio en blanco
\S cualquier cosa que no sea un espacio en blanco
\d cualquier dígito
\D cualquier cosa que no sea un dígito
\b inicio o final de palabra
\A comienzo
\Z final (incluido salto de línea)
\z final

Los patrones de expresiones regulares compatibles admiten modificadores, que se incluyen en el patrón, después del limitador final.

results matching ""

    No results matching ""