[SP-pm] Substituicoes balanceadas

Roberto Maluhy Junior maluhy em gmail.com
Terça Fevereiro 7 16:24:56 PST 2006


Olá,

Bom, daqui a pouco o código vai caber numa pílula! :)
Bem legal, obrigado pela ajuda e enriquecimento cultural em Perl...e
também literário...Afinal, este 42 está na base 10 ? :)

Abraços,
Roberto

On 2/7/06, Wendel Scardua <wendelscardua em gmail.com> wrote:
> Um pouco mais eficiente e mais claro, eu acho ^_^
>
> <code>
> %inicio = ("it" => "<i>",
>                "bf" => "<b>");
> %fim = ("it" => "</i>",
>              "bf" => "</b>");
> $a = 'abc abc abc \textit{abc abc} abc \textit{abc abc \textbf{abc
> \textbf{abc abc} abc} abc} abc.';
> 42 while $a =~ s/\\text(\w{2})\{([^{}]*)\}/$inicio{$1}$2$fim{$1}/g;
> print "$a";
> </code>
>
> ou ainda, mais "genérico" (vai saber se não tem outras tags LaTeXicas
> não-/text../ q precise substituir)
>
> <code>
> %inicio = ("textit" => "<i>",
>                "textbf" => "<b>");
> %fim = ("textit" => "</i>",
>              "textbf" => "</b>");
> $a = 'abc abc abc \textit{abc abc} abc \textit{abc abc \textbf{abc
> \textbf{abc abc} abc} abc} abc.';
> 42 while $a =~ s/\\(\w+)\{([^{}]*)\}/$inicio{$1}$2$fim{$1}/g;
> print "$a";
> </code>
>
> On 2/6/06, Gabriel Vieira <gabriel.vieira em gmail.com> wrote:
> > Aeeeeeeeeee
> >
> > hahah
> >
> > quebrei a cabeça e consegui uma 'gambiarra'(será?)
> >
> > Bom.. devido à procura da melhor solução, fiz com que sua string ficasse
> > mais complexa, da seguinte forma:
> > ---
> > abc abc abc \textit{abc abc} abc \textit{abc abc \textbf{abc \textbf{abc
> > abc} abc} abc} abc.
> > ---
> > * Coloquei um \textbf dentro de um \textbf que por sua vez estava dentro de
> > um \textit
> >
> > O intuito foi dificultar a string já que so com o \textbf dentro do \textit
> > foi um pouco fácil resolver, mas havia a falha caso houvesse + de 1 '\text*'
> > dentro do outro.
> > Deu pra entender? hehe..
> >
> > Seguindo...
> >
> > Escrevi o código para que fosse usado uma única vez, ou seja invés de um pro
> > IT e outro pro BF ficam os 2 em 1 so. Você pode definir quantos quiser, já
> > que basta apenas adicionar ao hash.
> >
> > *No código eu coloquei \\textit com 2 barras pq o interpretador estava lendo
> > como um comando tab (\t) ai não dava certo...
> >
> > <code>
> > %inicio = ("it" => "<i>",
> >                "bf" => "<b>");
> > %fim = ("it" => "</i>",
> >              "bf" => "</b>");
> > $a = "abc abc abc \\textit{abc abc} abc \\textit{abc abc \\textbf{abc
> > \\textbf{abc abc} abc} abc} abc.";
> > $a =~ s/\\text(\w{2})\{((\s|\w|<|>|\/)+)\}/$inicio{$1}$2$fim{$1}/g while $a
> > =~ /\\text\w{2}\{(\s|\w|<|>|\/)+\}/;
> > print "$a";
> > </code>
> >
> > Acho que da para melhorar...
> >
> > Testa ai ;)
> >
> > Abraços,
> >
> > Gabriel Vieira
> >
> > ----- Original Message -----
> > From: "Roberto Maluhy Junior" <maluhy em gmail.com>
> > To: <saopaulo-pm em pm.org>
> > Sent: Monday, February 06, 2006 7:12 PM
> > Subject: [SP-pm] Substituicoes balanceadas
> >
> >
> > Ola mais uma vez,
> >
> > La vou eu incomoda-los novamente. O Perl possui algum mecanismo ou
> > modulo que de conta de buscas balanceadas?
> > Vou citar um exemplo de LaTeX:
> > ---
> > abc abc abc \textit{abc abc} abc \textit{abc abc \textbf{abc abc} abc} abc.
> > ---
> >
> > Se faco s/\\textit\{(.*?)\}/<i>$1</i>/g; fico com
> > abc abc abc <i>abc abc</i> abc <i>abc abc \textbf{abc abc</i> abc} abc.
> > (ERRADO)
> >
> > No entanto, gostaria de obter o seguinte resultado
> > abc abc abc <i>abc abc</i> abc <i>abc abc \textbf{abc abc} abc</i> abc.
> > (CERTO)
> >
> > Como faco isso? Preciso obrigatoriamente utilizar um contador ou flag
> > de "ambientes" abertos e fechados etc...?
> >
> > Obrigado pela atencao,
> > Roberto
> > _______________________________________________
> > SaoPaulo-pm mailing list
> > SaoPaulo-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/saopaulo-pm
> >
> > _______________________________________________
> > SaoPaulo-pm mailing list
> > SaoPaulo-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/saopaulo-pm
> >
>
>
> --
> []s
> Wendel
> --
> "Or think of Perl as a bigger hammer.  It lets you treat everything
> like a nail,
> and get away with it most of the time.  But sometimes not."
> -- Larry Wall
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>


--
Roberto Maluhy Jr

Casa Editorial Maluhy & Co.
http://www.casamaluhy.com


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