Perl Brasil

Pesquisar

Documentação

Artigos

Planeta

Eventos

Comunidade

r1 - 06 Aug 2006 - JoenioCosta

Como tornar expressões regulares mais legíveis

Problema

Expressões regulares normalmente são difíceis de ler. Como torná-las mais legíveis?

Solução

Use delimitadores diferentes; utilize o sufixo /x.

Discussão

Quando precisamos lidar com padrões que incluem o caractere "/", podemos mudar o delimitador para tornar a expressão regular mais clara:

    $file =~ /http:\/\/(.*)\/(.*)/; # menos legível
    $file =~ m{http://(.*)/(.*)}; # mais legível!

Outra técnica interessante consiste em usar o sufixo /x, para permitir espaços e comentários dentro da expressão regular. Por exemplo:

    s/<(?:[^>'"]*|".*?"|'.*?')+>//gs;

    s/ < # substituir começando com "<"
        (?: # parêntesis de agrupamento (non-backreffing)
                [^>'"] * # 0 ou mais coisa diferentes de [>'"]
        | # ou...
                ".*?" # uma seção entre aspas duplas
        | # ou...
                '.*?' # uma seção entre aspas simples
        ) + # tudo isso acontecendo uma ou mais vezes
        > # terminando com ">"
    //gsx; # substituir por nada, i.e., elimina

Embora isso não seja tão claro quanto prosa, é muito útil para descrever cada parte da expressão regular.

Uma última técnica consiste em declarar trechos da expressão regular previamente: (to-do: encontrar um exemplo melhor)

    my $upperalphanum = qr{[A-Z0-9]+};
    if ($var =~ /$upperalphanum/) {
        # ...
    }

Comentários