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 № 1Basta 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.