Corrigindo a RegExp<br><br>s/(\w+)(?{push(@list, $1)})//g &amp;&amp; push(@list, undef);<br><br><br><br><br><div><span class="gmail_quote">Em 24/03/08, <b class="gmail_sendername">Lucas Mateus</b> &lt;<a href="mailto:lucasmateus.oliveira@gmail.com">lucasmateus.oliveira@gmail.com</a>&gt; escreveu:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Bom não sei se entendi certo, mas cheguei no resultado<br><br><br>use strict;<br>use warnings;<br>use Data::Dumper;<br><br>my (@list, $string);<br><br>$_ = $string = &lt;&lt;EOT;<span class="q"><br>key: value1<br>+cap3<br>
+cap4<br>+cap5<br>
key:value2<br>EOT<br><br></span>s/(\w+)(?{$1 &amp;&amp; push(@list, $1)})//g &amp;&amp; push(@list, undef);<br><br>print Dumper \@list;<br><br>__END__<br><br><br><br><br><div><span class="gmail_quote">Em 24/03/08, <b class="gmail_sendername">Marcel</b> &lt;<a href="mailto:webknowledge@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">webknowledge@gmail.com</a>&gt; escreveu:</span><div>
<span class="e" id="q_118e3d59f29077d6_3"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
perl -MData::Dumper -e &#39;$string=&quot;chave1:valor1\nbla\nble\nbli\nchave2:valor2\nblo\nblu\nchave3: valor3\nbly\n&quot;; @list = $string =~ m{(?:^([\S+]+):\s*((?:(?:[^\n]+|[\t]*))))|(?:^([\S+]+))}xmg; print Dumper \@list&#39;;<br>


$VAR1 = [<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;chave1&#39;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;valor1&#39;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undef,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undef,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undef,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;bla&#39;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undef,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undef,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;ble&#39;,<br>


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undef,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undef,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;bli&#39;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;chave2&#39;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;valor2&#39;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undef,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undef,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undef,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;blo&#39;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undef,<br>


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undef,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;blu&#39;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;chave3&#39;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;valor3&#39;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undef,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undef,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undef,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;bly&#39;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ];<br><br>Ou seja, pra cada linha a expressão espera 3 valores para comparar. Caso não encontre alguma, devolve undef. <br>


<br><div class="gmail_quote">2008/3/24 Marcel &lt;<a href="mailto:webknowledge@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">webknowledge@gmail.com</a>&gt;:<div><span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Eu tb tentei de todo jeito descobrir uma única regexp para realizar a tarefa. Mas só consegui retornar o que o breno conseguiu retornar. Um undef pra cada non-matched. <br><br><div class="gmail_quote">2008/3/20 breno &lt;<a href="mailto:breno@rio.pm.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">breno@rio.pm.org</a>&gt;:<div>


<div></div><div><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Oi Champs,<br>
<br>
Desculpe se estou falando besteira, mas o seu $key_value (qr{ $key<br>
$value $continuation }x ) está procurando diretamente por chave:valor<br>
E pela continuação (o +cap...) na mesma linha (o modificador &quot;m&quot; vc só<br>
passa no match do $key_value, e não antes). Não olhei com calma mas só<br>
de mudar para ( qr{ $key $value | $continuation }x ) obtive<br>
<br>
$VAR1 = [<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;key&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;value1&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;cap3&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;cap4&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;cap5&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;key&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;value2&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef<br>
 &nbsp; &nbsp; &nbsp; &nbsp;];<br>
<br>
que fora os undef&#39;s, é o que vc quer. Mas olhando a estrutura não acho<br>
que seja o que vc quer (embora não tenha entendido ainda o propósito<br>
:-), e sim um &quot;my $continuation &nbsp;= qr{ (?: \n \+ $value )* }mx;&quot; (e<br>
não &quot;?}x&quot; ) - mantendo o $key $value $continuation sem &quot;or&quot;. O<br>
problema é que isso devolve<br>
<br>
$VAR1 = [<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;key&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;value1&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;cap5&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;key&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;value2&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undef<br>
 &nbsp; &nbsp; &nbsp; &nbsp;];<br>
<br>
Que é só uma variação inútil do que vc já tinha. Enfim, são só<br>
ramblings feitos em 5 minutos, e sou péssimo em expressões regulares.<br>
Mas com sorte te dei algumas idéias para atacar o problema ou sei lá.<br>
<br>
[]s<br>
<br>
-b<br>
<br>
<br>
2008/3/20 Luis Motta Campos &lt;<a href="mailto:luismottacampos@yahoo.co.uk" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">luismottacampos@yahoo.co.uk</a>&gt;:<br>
<div><div></div><div>&gt; &nbsp; Gente,<br>
&gt;<br>
&gt; &nbsp; Eu estou tentando capturar uma quantidade arbitrária de valores usando<br>
&gt; &nbsp;uma expressão regular, mas estou com problemas. O meu código é este aqui:<br>
&gt;<br>
&gt; &nbsp;#!/usr/bin/perl<br>
&gt; &nbsp;use strict;<br>
&gt; &nbsp;use warnings;<br>
&gt;<br>
&gt; &nbsp;my $string = &lt;&lt;EOT;<br>
&gt; &nbsp;key: value1<br>
&gt; &nbsp;+cap3<br>
&gt; &nbsp;+cap4<br>
&gt; &nbsp;+cap5<br>
&gt; &nbsp;key:value2<br>
&gt; &nbsp;EOT<br>
&gt;<br>
&gt; &nbsp;my $key_value = do {<br>
&gt; &nbsp; &nbsp; my $key &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = qr{ ^ ( [a-zA-Z]+ ) : }x;<br>
&gt; &nbsp; &nbsp; my $empty_value &nbsp; = qr{ [ \t]* }x;<br>
&gt; &nbsp; &nbsp; my $free_form_str = qr{ [^\n]+ }x;<br>
&gt; &nbsp; &nbsp; my $value = qr{ \s* ( (?: $free_form_str | $empty_value ) ) }x;<br>
&gt; &nbsp; &nbsp; my $continuation &nbsp;= qr{ (?: \n \+ $value )? }x;<br>
&gt; &nbsp; &nbsp; qr{ $key $value $continuation }x;<br>
&gt; &nbsp;};<br>
&gt;<br>
&gt; &nbsp;print $key_value, $/;<br>
&gt;<br>
&gt; &nbsp;use Data::Dumper;<br>
&gt; &nbsp;my @list = $string =~ m{ $key_value }xmg;<br>
&gt; &nbsp;print Dumper \@list;<br>
&gt; &nbsp;__END__<br>
&gt;<br>
&gt; &nbsp;O resultado que eu tenho de rodar isso é<br>
&gt;<br>
&gt; &nbsp;$VAR1 = [<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;key&#39;,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;value1&#39;,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cap3&#39;,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;key&#39;,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;value2&#39;,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; undef<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; ];<br>
&gt;<br>
&gt; &nbsp;Mas o resultado que eu quero é<br>
&gt;<br>
&gt; &nbsp;$VAR1 = [<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;key&#39;,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;value1&#39;,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cap3&#39;,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cap4&#39;,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cap5&#39;,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;key&#39;,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;value2&#39;,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; undef<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; ];<br>
&gt;<br>
&gt; &nbsp;Podem haver uma quantidade arbitrária, não-determinada, não-previamente<br>
&gt; &nbsp;declarada de valores &quot;+cap#&quot; (onde &quot;#&quot; é um inteiro positivo).<br>
&gt;<br>
&gt; &nbsp;Vocês por acaso não tem uma sugestão de como eu poderia implementar isso?<br>
&gt;<br>
&gt; &nbsp;Meu Perl é o 5.8.8, apenas para constar.<br>
&gt;<br>
&gt; &nbsp;Obrigado a todo mundo com antecedência.<br>
&gt; &nbsp;Putamplexos!<br>
&gt; &nbsp;--<br>
&gt; &nbsp;Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,<br>
&gt; &nbsp;Perl fanatic evangelist, and amateur {cook, photographer}<br>
&gt;<br>
&gt; &nbsp;_______________________________________________<br>
&gt; &nbsp;SaoPaulo-pm mailing list<br>
&gt; &nbsp;<a href="mailto:SaoPaulo-pm@pm.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">SaoPaulo-pm@pm.org</a><br>
&gt; &nbsp;<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br>
&gt;<br>
_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br>
</div></div></blockquote></div></div></div><br>
</blockquote></span></div></div><br>
<br>_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br></blockquote></span></div></div><br>

</blockquote></div><br>