Recordamos algunas reglas básicas para el uso y manejo de expresiones regulares en PHP.
| Carácter | Significado |
|---|---|
| \ | Carácter de escape |
| ^ | Coincidencia al principio |
| $ | Coincidencia al final |
| . | Coincidencia con cualquier carácter excepto nueva línea \n |
| | | Opción alternativa OR |
| ( | Inicio subpatrón |
| ) | Final subpatrón |
| * | Se repite 0 o más veces |
| + | Se repite 1 o más veces |
| { | Inicio cuantificador min/max |
| } | Final cuantificador min/max |
| ? | Subpatrón opcional |
| Carácteres especiales utilizados detro de corchetes | |
| \ | Carácter de escape |
| ^ | No, utilizado en una posición inicial |
| - | Indica rangos de carácter |
Veamos algunos ejemplos prácticos del uso de esta sintaxis con la ayuda de algunas funciones de PHP para buscar o reemplazar cadenas.
Podemos comprobar la existencia de subcadenas que coincidan con el patrón de la expresión regular con las funciones ereg() y eregi(). La única diferencia entre ellas es que eregi() es "case insensitive", es decir no diferencia entre mayúsculas y minúsculas, mientras que ereg() sí.
$cadena = "http://www.google.com";
ereg('^(http|https):\/\/', $cadena);
//devuelve true ya que la cadena
//empieza por http://
ereg_replace('^(http|https):\/\/', 'https://', $cadena);
//sustituimos http:// por https://
Otro función útil para el manejo de expresiones regulares con PHP es split. Con su ayuda podemos dividir cadenas y obtener un array con las subcadenas resultantes.
$cadena = "http://www.google.com";
$arr = split('\/\/|\.', $cadena);
while (list($k, $v) = each($arr)) {
echo $v .'<br />';
}
//retorna
http:
www
google
com
Para realizar una comparación global de una expresión regular utilizamos la función preg_match_all() que buscará todas las coincidencias de la expresión regular dada y las introduce en un array en el orden que especifiquemos opcionalmente.
$cadena = "En el año 1942 Cristobal Colon descubrió américa. ";
$cadena .= "Murió en el 1506.";
preg_match_all("/[0-9]{4}/", $cadena, $coincidencias);
foreach ($coincidencias as $a) {
foreach ($a as $v) {
echo $v . '<br />';
}
}
//imprime
1942
1506