/ / Como posso extrair um número variável de grupos de dígitos de uma string Perl? - regex, perl, correspondências múltiplas

Como posso extrair um número variável de grupos de dígitos de uma string Perl? - regex, perl, vários jogos

Estou tentando analisar uma seqüência de caracteres em Perl com o formato:

Messages pushed to the Order Book queues 123691 121574 146343 103046 161253

Eu quero acessar os números no final da string, então pretendo fazer uma correspondência como

/(d+)/s

Meu problema é que o número de valores no final contém um número variável de strings.

Qual é a melhor maneira de formatar o regexp para sercapaz de acessar cada um desses números individualmente? Sou desenvolvedor de C ++ e estou apenas aprendendo Perl, por isso estou tentando encontrar a maneira mais limpa de Perl para fazer isso.

Obrigado pela ajuda.

Respostas:

6 para resposta № 1

Basta usar o sinalizador / g para fazer o operador de correspondência realizar uma correspondência global. No contexto da lista, o operador de correspondência retorna todos os resultados como uma lista:

@result = $string =~ /(d+)/g;

Isso funciona se não houver outros números além dos números finais.


4 para resposta № 2

Você pode usar o operador de correspondência em um contexto de lista com o sinalizador global para obter uma lista de todas as suas capturas entre parênteses. Exemplo:

@list = ($string =~ /(d+)/g);

Sua lista agora deve ter todos os grupos de dígitos em sua string. Consulte a documentação no operador de partida para mais informações.


1 para resposta № 3

"No contexto escalar, cada execução de m // g encontra a próxima correspondência, retornando verdadeiro se corresponder e falso se não houver mais correspondência" - (De perldoc perlop)

Portanto, você deve poder fazer um loop regex global, assim:

while ($string =~ /(d+)/g) {
push @queuelist, $1;
}

0 para a resposta № 4

Eu faria algo assim:

my @numbers;
if (m/Messages pushed to the Order Book queues ([ds]+)/) {
@numbers = split(/s+/, $1);
}

Não há necessidade de amontoá-lo em uma regex.