Expresiones Regulares - Referencia y Manejo
De forma extraordinaria y como material adicional, en esta ocasión nuestra entrada no tendrá “relación directa” con Drupal. Pero a nivel personal creo que es uno de los recursos más valiosos a la hora de procesar información, sin conocer previamente su contenido.
Las expresiones regulares son una potente herramienta de programación para la busqueda y sustitucion de patrones en strings. Pueden utilizarse en un gran número de ambitos salvando unas pequeñas diferencias. Pero en este caso nos centraremos en el uso de las expresiones regulares con PHP para no alejarnos demasiado de nuestro contexto de partida.
Metacarácter | Descripción |
---|---|
^ | Inicio de string |
$ | Final de string |
\s | Coincide con cualquier espacio |
\d | Coincide con cualquier dígito [0-9] |
\D | Coincide con cualquier carácter que NO sea un dígito |
\w | Coincide con cualquier carácter alfanúmerico |
\W | Coincide con cualquier carácter NO alfanúmerico |
. | Coincide con cualquier carácter |
* | El carácter previo puede encontrarse 0 o más veces en el patrón |
+ | El carácter previo puede encontrarse 1 o más veces en el patrón |
? | El carácter previo puede encontrarse 0 o 1 vez en el patrón |
{n} | El carácter previo se encontrará n veces en el patrón |
[ | Marca el inicio de la definición de clase carácter |
] | Marca el fin de la definición de clase carácter |
- | Indica un rango de caracteres |
( | Marca el inicio de un subpatrón |
) | Marca el fin de un subpatrón |
Funciones PCRE
preg_match()
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
Es la función más utilizada para el manejo de expresiones regulares en PHP. Realiza una comparación entre una cadena subject y una expresión regular pattern.
Esta función devuelve 1 cuando subject SI COINCIDE con el patrón introducido en pattern. En caso contrario devolverá FALSE.
- preg_match_all - Almacena en un array todas las coincidencias con el patrón.
preg_split()
array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )
Esta función divide el string de entrada utilizando una expresión regular como norma para realizar la división.
Esta función devuelve un array de substrings coincidentes con el patrón introducido o FALSE en caso de no encontrar coincidencia.
preg_replace()
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
Esta función realiza la búsqueda del patrón y realiza la sustitución indicada.
Devuelve un array si el parámetro subject es un array o un string en caso contrario. Devolverá NULL en caso de error.
preg_filter()
mixed preg_filter ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
Esta función realiza una busqueda y sustitución del mismo modo que preg_replace() pero con la excepción de que devuelve sólo los sujetos donde existió coincidencia.
preg_grep()
array preg_grep ( string $pattern , array $input [, int $flags = 0 ] )
Esta función devuelve la matriz de elementos que coincidan con el patrón introducido. Es decir, recorre el texto de entrada y almacena tan solo las coincidencias con el patrón como salida.
preg_last_error()
int preg_last_error ( void )
Devuelve el código de error de la última ejecución de expresión regular.
preg_quote()
string preg_quote ( string $str [, string $delimiter = NULL ] )
Esta función se utiliza para escapar caracteres, (añade / antes del carácter), que formen parte de la sintaxis de una expresion regular.
Devuelve el string entre comillas y con los caracteres correspondientes escapados
Ejemplos
$origen = "Lorem ipsum dolor sit amet, consectetur adipiscing elit";
$patrón = '/ a.+ /';
preg_match($patrón, $origen, $coincidencias);
print_r($coincidencias);
En este ejemplo buscamos en el array $origen subcadenas formadas por un espacio (“ “), la letra “a” y cualquier carácter “.” con una o más apariciones “+”.
El resultado que obtendríamos de $coincidencias sería:
Array
(
[0] => Array
(
[0] => amet
[1] => adipiscing
)
)
La otra utilidad fundamental de las expresiones regulares es la sustitución como veremos en el siguiente ejemplo.
$cadena = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit';
$patrones = array();
$patrones[0] = '/ipsum/';
$patrones[1] = '/amet/';
$patrones[2] = '/elit/';
$sustituciones = array();
$sustituciones[2] = 'fistrum';
$sustituciones[1] = 'jarl';
$sustituciones[0] = 'de la pradera';
echo preg_replace($patrones, $sustituciones, $cadena);
En este ejemplo queremos sutituir ciertas palabras por otras. [*]
El resultado obtenido sería:
Lorem fistrum dolor sit jarl, consectetur adipiscing de la pradera
Utilizando este método podremos modificar un texto de una forma rápida y sencilla. Tiene especial importancia cuando se realizarán un gran número de cambios que siguen una relación. Por ejemplo, para hacer que la primera letra de cada palabra de un texto sea mayúscula podríamos utilizar:
preg_replace('/ [a-z]/', ' [A-Z]', $cadena)
Para obtener más información sobre expresiones regulares en este ámbito puedes consultar el siguiente enlace:
[*] De regalo os dejo el enlace al generador de Lorem ipsum de Chiquito por si os llama la atención como cuando yo lo descubrí Chiquito Ipsum