Programación en Perl/Expresiones regulares

Subrutinas
Tema anterior

Expresiones regulares
Índice

Funciones
Siguiente tema


Funciones utilizadas
  • Patron de busqueda
  • Sustitución
  • Fragmentación
Conceptos implicados

{{{2}}}

Expresiones regulares

editar

El 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.

Subrutinas
Tema anterior

Expresiones regulares
Índice

Funciones
Siguiente tema