[SP-pm] Capturando Uma Quantidade Arbitrária de Valores Com Uma Expressão Regular - Sugestões?

Luis Motta Campos luismottacampos em yahoo.co.uk
Quinta Março 20 05:45:26 PDT 2008


  Gente,

  Eu estou tentando capturar uma quantidade arbitrária de valores usando
uma expressão regular, mas estou com problemas. O meu código é este aqui:

#!/usr/bin/perl
use strict;
use warnings;

my $string = <<EOT;
key: value1
+cap3
+cap4
+cap5
key:value2
EOT

my $key_value = do {
    my $key           = qr{ ^ ( [a-zA-Z]+ ) : }x;
    my $empty_value   = qr{ [ \t]* }x;
    my $free_form_str = qr{ [^\n]+ }x;
    my $value = qr{ \s* ( (?: $free_form_str | $empty_value ) ) }x;
    my $continuation  = qr{ (?: \n \+ $value )? }x;
    qr{ $key $value $continuation }x;
};

print $key_value, $/;

use Data::Dumper;
my @list = $string =~ m{ $key_value }xmg;
print Dumper \@list;
__END__

O resultado que eu tenho de rodar isso é

$VAR1 = [
          'key',
          'value1',
          'cap3',
          'key',
          'value2',
          undef
        ];

Mas o resultado que eu quero é

$VAR1 = [
          'key',
          'value1',
          'cap3',
          'cap4',
          'cap5',
          'key',
          'value2',
          undef
        ];

Podem haver uma quantidade arbitrária, não-determinada, não-previamente
declarada de valores "+cap#" (onde "#" é um inteiro positivo).

Vocês por acaso não tem uma sugestão de como eu poderia implementar isso?

Meu Perl é o 5.8.8, apenas para constar.

Obrigado a todo mundo com antecedência.
Putamplexos!
-- 
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}



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