Bom o Nilson respondeu a parte Y do "problema XY", então vou responder sobre a parte X (afinal é bom entender as regexes em geral, mesmo que não sejam uma boa solução para esse caso específico).<br><br>Iberê, a questão é que não há "problema". Você pediu literalmente:
<br><br> li> seguido do máximo possível de qualquer coisa, seguido do máximo possível de espaços, seguido de <br<br><br>Se você queria "li> seguido do mínimo possível de qualquer coisa, etc, etc" deveria ter escrito /li>(.*
<span style="font-weight: bold;">?)</span>\s*<br/ . Note o uso de *? (não-guloso) ao invés de * (guloso).<br><br>Por outro lado, costuma ser ineficiente usar o operador não-guloso, então você deveria preferir uma solução "gulosa", mas mais específica.
<br><br>Por exemplo, suponha que o texto que você quer capturar entre li> e <br não apresente nenhuma tag (isto é, nunca vai aparecer os caracteres < e >) . Então, você pode escrever uma regexp gulosa: /li>([^<>]*)<br/ , que significa: pege li> , seguido do máximo possível de qualquer coisa (exceto < e > ), seguido de <br.
<br><br>Agora, só mais um detalhe que passou desapercebido, justamente pela confusão com a gulodice do *. Na sua regexp você escreveu:<br><br>/li>(.*)\s*<br/<br><br>Eu suponho que você queria que a parte capturada não terminasse com espaços, e que todos os espaços fossem pegos pelo /\s*/. Sinto muito, mas não é assim que a coisa funciona. /.*/ vai bater com qualquer coisa, inclusive espaços - mas em geral não o \n. Logo, o /.*/ vai pegar todos os espaços antes de <br, não deixando nenhunzinho pro /\s*/ .
<br><br>Se usar o /.*?/ esse problema não ocorre, pois ele não é guloso, e o /\s*/ vai bater com todos os espaços.<br><br>Novamente, numa solução gulosa, basta dizer que não há um espaço à esquerda do /\s*/, ficando:<br><br>
/li>([^<>]*)(?<!\s)\s*<br/<br><br>onde (?<!\s) é uma "afirmação" que "bate" se à esquerda não bater /\s/ .<br><br>Sugiro dar uma lida na documentação de expressões regulares (perldoc perlre , ou man perlre , ou google perlre :-) ).
<br><br>Mas, no caso de tratar html, vale mais a pena usar módulos que fazem parsing de html. Sugiro, por exemplo, o HTML::TreeBuilder (<a href="http://search.cpan.org/~petek/HTML-Tree-3.23/lib/HTML/TreeBuilder.pm">http://search.cpan.org/~petek/HTML-Tree-3.23/lib/HTML/TreeBuilder.pm
</a>). <br><br><div><span class="gmail_quote">On 2/26/07, <b class="gmail_sendername">"Iberê O. Kuntz de Souza"</b> <<a href="mailto:kuntzzz@gmail.com">kuntzzz@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;">
Aee galera..<br>to com um probeminha aqui. O codigo ta tipo assim:<br><br>my $_ = '<li>isso eh um teste.<br><a href="<a href="http://www.lalala.com.br">www.lalala.com.br</a>">UM MONTE<br>DE COISA AQUI!!!!!<li>just another perl hacker.<br>hehehehehe';
<br>if ( /li>(.*)\s*<br/ ) { print $1,"\n" }<br><br>o problema eh que quando executo ele pega ateh o ultimo '<br', send que<br>eu quero que pare no primero, simplesmente pegando "isso eh um teste.".
<br>Obrigado.<br>_______________________________________________<br>Cascavel-pm mailing list<br><a href="mailto:Cascavel-pm@pm.org">Cascavel-pm@pm.org</a><br><a href="http://mail.pm.org/mailman/listinfo/cascavel-pm">http://mail.pm.org/mailman/listinfo/cascavel-pm
</a><br></blockquote></div><br><br clear="all"><br>-- <br>[]s<br>Wendel<br><br>"Não ajustar o auto-ajuste" - <a href="http://wendel.scardua.net/">http://wendel.scardua.net/</a>