Bom o Nilson respondeu a parte Y do &quot;problema XY&quot;, 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á &quot;problema&quot;. Você pediu literalmente:
<br><br>&nbsp;li&gt; seguido do máximo possível de qualquer coisa, seguido do máximo possível de espaços, seguido de &lt;br<br><br>Se você queria &quot;li&gt; seguido do mínimo possível de qualquer coisa, etc, etc&quot; deveria ter escrito /li&gt;(.*
<span style="font-weight: bold;">?)</span>\s*&lt;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 &quot;gulosa&quot;, mas mais específica.
<br><br>Por exemplo, suponha que o texto que você quer capturar entre li&gt; e &lt;br não apresente nenhuma tag (isto é, nunca vai aparecer os caracteres &lt; e&nbsp; &gt;) . Então, você pode escrever uma regexp gulosa: /li&gt;([^&lt;&gt;]*)&lt;br/ , que significa: pege li&gt; , seguido do máximo possível de qualquer coisa (exceto &lt; e &gt; ), seguido de &lt;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&gt;(.*)\s*&lt;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 &lt;br,&nbsp; 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&gt;([^&lt;&gt;]*)(?&lt;!\s)\s*&lt;br/<br><br>onde (?&lt;!\s) é uma &quot;afirmação&quot; que &quot;bate&quot; 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">&quot;Iberê O. Kuntz de Souza&quot;</b> &lt;<a href="mailto:kuntzzz@gmail.com">kuntzzz@gmail.com</a>&gt; 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 $_ = &#39;&lt;li&gt;isso eh um teste.&lt;br&gt;&lt;a href=&quot;<a href="http://www.lalala.com.br">www.lalala.com.br</a>&quot;&gt;UM MONTE<br>DE COISA AQUI!!!!!&lt;li&gt;just another perl hacker.&lt;br&gt;hehehehehe&#39;;
<br>if ( /li&gt;(.*)\s*&lt;br/ ) { print $1,&quot;\n&quot; }<br><br>o problema eh que quando executo ele pega ateh o ultimo &#39;&lt;br&#39;, send que<br>eu quero que pare no primero, simplesmente pegando &quot;isso eh um teste.&quot;.
<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>&quot;Não ajustar o auto-ajuste&quot; - <a href="http://wendel.scardua.net/">http://wendel.scardua.net/</a>