/regexp/
) pero, si se preceden
de la m (de matching) pueden
usarse otros delimitadores (por ejemplo m{regexp}
, m#regexp#
, etc.).
Las expresiones regulares son un lenguaje para la descripción de lenguajes.
Una expresión regular define un lenguaje.
Por ejemplo, la expresión regular /[a-z]+/
define el lenguaje formado por las cadenas que consisten en repeticiones
de una o mas letras minúsculas.
La tabla 1.3 muestra algunos de los metasímbolos usados en las expresiones regulares. En http://refcards.com/docs/trusketti/perl-regexp/perl-regexp-refcard-a4.pdf puede encontrar un PDF con una hoja de referencia que resume el uso de las expresiones regulares en Perl.
Para saber más sobre expresiones regulares, estudie el capítulo
3. Por ahora nos basta saber que una expresión regular define
un lenguaje. Asi la expresión regular /__END__/
define el lenguaje
cuya única palabra es __END__
y la expresión regular /LHP/
define el lenguaje cuya única palabra es LHP
.
Normalmente, con las expresiones regulares se usa El operador de binding =~, el cuál nos permite ''asociar'' la variable con la operación de casamiento/sustitución sobre la expresión regular:
if ($d =~ /esto/) { print "la palabra 'esto' aparece en: $d\n" }Si se omiten el operador
=~
y la variable
entonces se usa la variable por defecto $_
:
pp2@nereida:~/doc/2005_2006$ perl -wde 0 main::(-e:1): 0 DB<1> $_ = '-3.2' DB<2> print "yes" if /\d+\.?\d*/ # igual que $_ =~ /\d+\.?\d*/ yes DB<3> print "yes" if /^\d+\.?\d*$/ # No casa. $_ empieza por '-' DB<4> print "yes" if /^-?\d+\.?\d*$/ yes
A menudo resulta necesario comprobar si la variable contiene una cifra,
una vocal, o caracteres de control particulares.
Una clase de caracteres se define mediante el operador [ ]
.
He aquí algunas posibles construcciones:
[aeiou] # Cualquier vocal [0-9] # Cualquier número del 0 al 9. [0123456789] # Igual [0-9] [0-9a-z] # Cualquier letra o cualquier numéro [\~\@;:\^_] # Cualquiera de los caracteres(~,@,;,:^,_)
Se puede definir una clase de caracteres valiéndose
de la complementaria mediante el uso del circumflejo "^"
:
[^0-9] # Carácter que no sea un dígito
Perl introduce algunas abreviaturas usadas para algunas de las clases mas comunes:
|
Después de una operación de matching lo que casó con el primer
paréntesis se conserva en la variable $1
, lo que casó con
el segundo en $2
, etc.
Véase el siguiente ejemplo en el que se imprime lo que casó con los paréntesis décimo, undécimo, etc.:
lusasoft@LusaSoft:~$ perl -wde 0 main::(-e:1): 0 DB<1> $x = "hello world!\n" DB<2> $x =~ /(h)(e)(l)(l)(o)( )(w)(o)(r)(l)(d)(!)(\n)/; print "$10 $11 $12 $13" l d !