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