[SP-pm] Substituicoes balanceadas

Wendel Scardua wendelscardua em gmail.com
Terça Fevereiro 7 05:57:00 PST 2006


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


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