/ / Come posso estrarre un numero variabile di gruppi di cifre da una stringa Perl? - regex, perl, corrispondenze multiple

Come posso estrarre un numero variabile di gruppi di cifre da una stringa Perl? - regex, perl, multiple-matches

Sto tentando di analizzare una stringa in Perl con il formato:

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

Voglio accedere ai numeri alla fine della stringa, quindi intendo fare una partita come

/(d+)/s

Il mio problema è che il numero di valori alla fine contiene un numero variabile di stringhe.

Qual è il modo migliore per formattare la regexpin grado di accedere a ciascuno di quei numeri singolarmente? Sono uno sviluppatore di C ++ e sto imparando il Perl, quindi sto cercando di trovare il modo Perl più pulito per raggiungere questo obiettivo.

Grazie per l'aiuto.

risposte:

6 per risposta № 1

Basta usare il flag / g per fare in modo che l'operatore di match esegua una partita globale. Nel contesto dell'elenco, l'operatore di corrispondenza restituisce tutti i risultati come elenco:

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

Funziona se non ci sono altri numeri oltre a quelli finali.


4 per risposta № 2

È possibile utilizzare l'operatore di corrispondenza in un contesto di elenco con la bandiera globale per ottenere un elenco di tutte le acquisizioni tra parentesi. Esempio:

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

Il tuo elenco dovrebbe ora avere tutti i gruppi di cifre nella tua stringa. Vedi la documentazione sul operatore partita per maggiori informazioni.


1 per risposta № 3

"Nel contesto scalare, ogni esecuzione di m // g trova la corrispondenza successiva, restituendo vero se corrisponde e falsa se non ci sono ulteriori corrispondenze" - (Da perldoc perlop)

Quindi dovresti essere in grado di creare un ciclo regex globale, in questo modo:

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

0 per risposta № 4

Farei qualcosa del genere:

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

Non c'è bisogno di stiparlo in una regex.