Informática Numaboa - Tutoriais e Programação
Linguagem Perl - Expressões Regulares
Sex 21 Nov 2008 12:55 |
- Detalhes
- Categoria: Perl e CGI
- Atualização: Sexta, 21 Novembro 2008 13:56
- Autor: vovó Vicki
- Acessos: 25312
Expressões Regulares são padrões de procura definidos para caracteres e cadeias de caracteres (strings). Com a ajuda destes padrões pode-se pesquisar e processar o conteúdo de variáveis. Para tarefas de CGI, as expressões regulares são de importância vital. Os componentes de um fluxo de dados de um formulário HTML que seja enviado a um programa CGI, por exemplo, podem ser identificados através do uso das expressões regulares. Da mesma forma, com a ajuda de expressões regulares, é possível fazer a leitura ordenada de arquivos (por exemplo, de um livro de visitas) de acordo com uma regra e transmitir os dados como código HTML a um navegador requisitante. E, finalmente, as expressões regulares constituem um meio poderoso de procura de expressões complexas em grandes volumes de dados.
Para os principiantes as expressões regulares parecem estranhas e são o motivo de alguns scripts Perl terem sequências de caracteres crípticos de aparência ameaçadora. Quem por acaso souber lidar com o comando UNIX/Linux grep, não terá dificuldades de se acostumar com as expressões regulares da Perl.
Utilizando expressões regulares
Para poder usar as expressões regulares é necessário conhecer todas as possibilidades que elas oferecem. Exemplo 1:
Exemplo 2:
Exemplo 3:
Normalmente é possível identificar uma expressão regular em Perl através das duas barras / ... /. A expressão regular fica localizada entre as duas barras.
Antes de utilizar uma expressão regular, é necessário ter um objetivo de busca ou procura. A busca pode ser, por exemplo, um valor que esteja armazenado numa escalar (como no exemplo 1) ou os valores constantes nos elementos de uma matriz (como no exemplo 2), ou valores que ocorram em linhas de texto de um arquivo (como no exemplo 3).
No exemplo 1 pesquisa-se a existência da sequência de caracteres "PERL" na variável de contexto PATH. Observe que uma sequência de caracteres contida numa expressão regular não fica entre aspas. No exemplo, o conteúdo de $ENV{'PATH'} é armazenado na escalar $Dados. Efetua-se a procura da seqüência de caracteres "PERL" com if($Dados =~ /PERL/). O importante, neste caso, é o operador de busca =~. Portanto, com expressões if do tipo if($NomeDaEscalar =~ /expressão regular/) é possível efetuar buscas no conteúdo das escalares desejadas.
No exemplo 2 define-se uma matriz com nomes de cidades. Dentro do laço for, todos os elementos desta lista (ou seja, os nomes das cidades) são submetidos à procura das letras M, K ou S. A busca é formulada com if(/[MKS]/). Neste caso, ao contrário do exemplo 1, não foi utilizado um operador de busca porque, devido ao laço for, a busca é sempre efetuada no elemento atual da matriz. Também é possível efetuar a procura utilizando-se a variável predefinida $_ através de if($_ =~ /[MKS]/). Entretanto, como está claro qual valor está sob busca, a forma reduzida if(/[MKS]/) também é suficiente.
No exemplo 3, um arquivo de log é lido linha a linha. Procura-se neste arquivo a ocorrência de "index.htm". Se um linha contiver a referida sequência de caracteres, o contador é incrementado. Se não, o contador permanece inalterado. No final, o valor do número de index.htm encontrados é apresentado. A expressão regular deste exemplo aparece numa expressão condicional simplificada. A expressão regular é simplesmente testada se é verdadeira ou falsa. Se for verdadeira ("index.htm" existe na linha atual), a diretiva da esquerda dos dois pontos : é executada; se for falsa, a diretiva da direita é executada. (Veja também o tutorial Linguagem Perl - Arquivos para complementar o tema arquivos).
Observação: Uma das grandes aplicações das expressões regulares é em buscas e substituições em strings. Também podem ser parâmetros de algumas funções Perl.
Expressões Regulares para Caracteres Isolados
Com expressões regulares é possível
- procurar um determinado caractere
- procurar por vários caracteres
- procurar por um caractere num determinado contexto
( 1) | /a/ | # encontra 'a' |
( 2) | /[ab]/ | # encontra 'a' ou 'b' |
( 3) | /[A-Z]/ | # encontra todas as letras maiúsculas |
( 4) | /[0-9]/ | # encontra números |
( 5) | /\d/ | # encontra números - como em (4) |
( 6) | /\D/ | # encontra tudo exceto números |
( 7) | /[0-9]\-/ | # encontra números ou o sinal de menos |
( 8) | /[\[\]]/ | # encontra tudo que estiver contido em colchetes [ ] |
( 9) | /[a-zA-Z0-9_]/ | # encontra letras, números ou sinal de sublinhado |
(10) | /[\w]/ | # encontra letras, números ou sinal de sublinhado - como em (9) |
(11) | /[\W]/ | # encontra tudo, exceto letras, números e sinal de sublinhado |
(12) | /[\r]/ | # encontra o sinal de retorno de carro (típico do DOS) |
(13) | /[\n]/ | # encontra o sinal para quebra de linha |
(14) | /[\t]/ | # encontra o sinal de tabulação (tab) |
(15) | /[\f]/ | # encontra o sinal para quebra de página |
(16) | /[\s]/ | # encontra o sinal de espaço assim como os sinais referidos de (12) a (15) |
(17) | /[\S]/ | # encontra tudo, exceto sinal de espaço e os de (12) a (15) |
(18) | /[^äöüÄÖÜ]/ | # encontra todos os caracteres com trema |
(19) | /[^a-zA-Z]/ | # encontra tudo que não contiver letras |
(20) | /[ab]/s | # encontra 'a' ou 'b' também em várias linhas |
Quando se pesquisa a existência de caracteres isolados em expressões regulares, é necessário utilizar as barras invertidas (contrabarras) e os colchetes. Só quando a procura for por um caractere único, como no exemplo (1), os colchetes podem ser desprezados. Se diversos caracteres forem anotados sem estarem entre colchetes, eles serão interpretados como uma string.
Quando a procura for por um grupo de determinados caracteres, estes são simplesmente anotados entre colchetes - como no exemplo (2).
Quando se pesquisa um determinado contexto, por exemplo a primeira metade do alfabeto ou números, marca-se o contexto desejado com um caractere inicial seguido de um sinal de menos e do caracter final, como mostram os exemplos (3) e (4).
Quando se deseja procurar um dos seguintes sinais, + - ? . * ^ $ ( ) [ ] { } | \, há a necessidade de precedê-los com uma barra invertida - como mostrado nos exemplos (7) e (8).
Existem também padrões de pesquisa especiais constituídos por uma barra invertida e uma letra chave. Os exempos (5), (6) e de (10) a (17) mostram estes padrões.
Uma procura negativa também pode ser efetuada. Para isto, utiliza-se o acento circunflexo ^ antes do caractere ou contexto desejados. Uma pesquisa deste tipo tem como resultado apenas as partes que não contenham os caracteres indicados. Os exemplos (18) e (19) mostram sua utilização.
Para procuras em mais de uma linha, a expressão regular precisa terminar com um s. Veja o exemplo (20).
- Anterior
- Próximo >>