Essa linha não imprimiu nada...<br><br> perl -e '$str = "aaabbb"; print 42,"\n" if $str =~ /a(?:n(?{$c++}))*b(??{'n' x $c})$/;'<br><br>Aliás, não consegui nem entender essa regex aí... ela criaria uma variável "n" contendo o número de vezes que "a" aparece ?
<br><br>(olhando melhor...)<br><br>ei, cê fez ela bater com "a n^k b n^k" ... tá, quase a mesma coisa, exceto que esta regexp poderia ser escrita simplesmente como /a(n*)b\1/ .<br><br>De qualquer jeito, você tá dependendo de um eval, ou seja, não é uma regexp "de verdade" - na verdade, backreferences também são trapaças para regexps teóricas, mas elas não envolvem eval e não aumentam tanto assim a expressividade das regexps (você continua não podendo fazer "a^n b^n" ).
<br><br> Acho até que algum perldoc avisa para não usar essas construções. Lembrei, perldoc perlre:<br> "(?{ code })"<br> WARNING: This extended regular expression feature is considered highly experimental, and may be changed or deleted
<br> without notice.<br><br> This zero-width assertion evaluates any embedded Perl code. It always succeeds, and its "code" is not interpolated.<br> Currently, the rules to determine where the "code" ends are somewhat convoluted.
<br><br> (...)<br><br> "(??{ code })"<br> WARNING: This extended regular expression feature is considered highly experimental, and may be changed or deleted<br> without notice. A simplified version of the syntax may be introduced for commonly used idioms.
<br><br><br><br><br>[]s<br>Wendel<br><br><div><span class="gmail_quote">On 5/24/07, <b class="gmail_sendername">Nilson Santos Figueiredo Junior</b> <<a href="mailto:acid06@gmail.com">acid06@gmail.com</a>> wrote:</span>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">On 5/24/07, Wendel Scardua <<a href="mailto:wendelscardua@gmail.com">wendelscardua@gmail.com
</a>> wrote:<br>> A string "a^n b^n" (que não é regular) não pode ser reconhecida com uma<br>> regexp do Perl (a menos de trapaças envolvendo "use re 'eval'").<br><br>$str =~ /a(?:n(?{$c++}))*b(??{'n' x $c})$/;
<br><br>Devem ter outros jeitos melhores ainda.<br>Por esse tipo de coisa que regex de Perl é melhor que das outras linguagens...<br><br>-Nilson Santos F. Jr.</blockquote></div><br>--<br>"Não ajustar o auto-ajuste" -
<a href="http://wendel.scardua.net/">http://wendel.scardua.net/</a>