[Cascavel-pm] Criar links em um texto

Luis Motta Campos luismottacampos em yahoo.co.uk
Segunda Julho 2 12:38:32 PDT 2007


fernandolouis em terra.com.br wrote:
>  > Antes que alguém diga RTFM...
> Obrigado!
> 
>  > $texto =~ s/((\d+) refrigerantes)/<a 
> href="lerolero.pl?quantidade=$2">$1<\/a>/g
>  > O primeiro abre parênteses que bater vai para o $1
>  > O segundo vai para $2
>  > []s
>  > Wendel
>  
> PERFEITO Wendel!
> A "quantidade" e a "descrição" está resolvido. Realmente eu desconhecia 
> essas variáveis especiais de expressões constantes.
>  
> Mas e o "tipo"???
> se for "revista" deve ir "programa.pl?tipo=1" e se for "jornal" deve ir 
> "programa.pl?tipo=2".
>  
> não posso fazer um "if" dentro das regex... então como proceder?

   Não, dentro das REs não se recomenda que se faça IFs (note que eu não 
disse que não é possível.

   Faz assim:

   sub jornal_ou_revista {
     my $palavra = lc shift;
     return $palavra eq 'jornal'? 1 :
       $palavra eq 'revista' ? 2 :
         die qq{$palavra não é jornal nem revista!};
   }

   s{<<<REGEXP GRANDE E FEIA CAPTURANDO tipo e numero>>>}
    {q{<a href="...}.$2.q{&tipo=}.jornal_ou_revista( $1 )}xe;

   o "xe" no final da expressão regular permite que você interprete 
código perl no segundo membro (a parte que vai ser colocada no lugar do 
match), antes da substituição. A substituição usa a string que você 
retornar com o código, não o código em si.

   Eu ainda acho que a tua solução é uma vergonha para um doutorando. 
Reconsidere as recomendações para usar Gramáticas no lugar de REs.

   Putamplexos!
-- 
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}


Mais detalhes sobre a lista de discussão Cascavel-pm