Programación en Perl/Expresiones regulares
Expresiones regulares
editarEl lenguaje Perl incluye una sintaxis especializada para escribir expresiones regulares y el intérprete contiene un motor para emparejar strings con expresiones regulares. El motor de expresiones regulares usa un algoritmo de Vuelta Atrás (backtracking), extendiendo sus capacidades desde el simple emparejamiento de patrones simples con la captura y sustitución de strings. El motor de expresiones regulares se deriva de regex, escrito por Henry Spencer.
La sintaxis de expresiones regulares fue originalmente tomada de las expresiones regulares de Unix Versión 8. Sin embargo, se diferenció ya antes del primer lanzamiento de Perl y desde entonces ha ido incorporando muchas más características. Otros lenguajes y aplicaciones están adoptando las expresiones regulares de Perl en vez de las expresiones regulares POSIX, incluyendo PHP, Ruby, Java y el Servidor HTTP Apache.
El operador m//
(empareja) permite comprobar un emparejamiento por medio de una expresión regular. (Para abreviar, el precedente m
puede ser omitido.) En el caso más simple, una expresión como:
$x =~ m/abc/
evalúa a verdadero si y sólo si el string
$x
empareja con la expresión regular abc
.
Partes de la expresión regular pueden ser incluidas entre paréntesis: las partes correspondientes de un string emparejado son capturadas. Los strings capturados son asignados de forma secuencial a las variables internas $1, $2, $3, ...
y una lista de strings capturados se devuelve como valor del emparejamiento.
$x =~ m/a(.)c/; # captura el carácter entre 'a' y 'c' y lo guarda en $1
El operador
s///
(sustitución) especifica una operación de búsqueda y reemplazo:
$x =~ s/abc/aBc/; # Convierte la b en mayúscula
Las expresiones regulares en Perl pueden tomar unos modificadores. Son sufijos de una sola letra que modifican el significado de la expresión:
$x =~ m/abc/i; # emparejamiento independientemente de si están en mayúscula o minúscula
$x =~ s/abc/aBc/g; # búsqueda y reemplazo global (a lo largo de todo el string)
Las expresiones regulares pueden ser densas y crípticas. Esto es porque la sintaxis de las expresiones regulares es extremadamente compacta, generalmente usando caracteres sueltos o pares de caracteres que representan sus operaciones. Perl alivia un poco este problema con el modificador
/x
que permite a los programadores poner espacio en blanco y comentarios dentro de las expresiones regulares:
$x =~ m/a # empareja una 'a'
. # empareja cualquier carácter
c # empareja una 'c'
/x;
Un uso común de las expresiones regulares es el de especificar delimitadores de campos al operador
split
:
@palabras = split m/,/, $línea; # divide la $línea de valores separados por comas
El operador
split
complementa la captura de string. La captura de string devuelve las partes de un string que emparejan con una expresión regular; split
devuelve las partes que no emparejan.