Saltar para o conteúdo

Perl/Expressões regulares

Origem: Wikilivros, livros abertos por um mundo aberto.

A linguagem Perl é reconhecida por ser uma excelente ferramenta para lidar com textos, e as expressões regulares são um dos principais fatores por trás desta qualidade. As expressões regulares de Perl mostram uma eficiência e flexibilidade incomuns, pois estão diretamente integradas à linguagem.

A expressão regular mais simples é uma string:

"Hello World" =~ /World/;  # matches

Dentro de um programa, esta expressão regular poderia aparecer assim:

if ($string =~ /World/) {
  print "It matches\n";
} else {
  print "It doesn't match\n";
}

Nós podemos usar metacaracteres, como "\d" para designar dígitos:

/\d\d:\d\d:\d\d/; # matches a hh:mm:ss time format

O uso de parênteses permite retornar trechos encontrados na pesquisa:

if ($string =~ /(..):(..):(..)/) {   # parse out values
  $hours = $1;
  $minutes = $2;
  $seconds = $3;
}

Diversas funções de Perl aceitam expressões regulares como argumentos. O exemplo a seguir mostra como dividir as colunas de uma string separada por tabs:

@columns = split(/\t/, $string);


O asterisco (*) colocado após um valor indica repetição a partir de zero. O símbolo de soma (+) indica repetição a partir de um.

 ...
 $string = "aaa";
 if (string =~ /a*b*/) { # casa
   ...
 }
 if (string =~ /a+b+/) { # nao casa
   ...
 }


Uma expressão é case-sensitive, mas, colocando-se i no final, faz-se a procura igualando maiúsculas e minúsculas. Exemplo:

 ...
 $string = "DSC00035.JPG"; # nome tipico de arquivo de camera digital Sony
 if ($string =~ /dsc[0-9]+[.]jpg/) {  # nao casa
   ...
 }
 if ($string =~ /dsc[0-9]+[,]jpg/i) {  # casa
   ...
 }
 

Mais informações: