$ perl -E ' my $re = qr{(\w+)\s+((?:\s*\d+)*)}; my $str = "a 1 2 3 b 4 5 6"; while ($str =~ /$re/g) { say "|$&|: |$1| |$2|"; } ' |a 1 2 3|: |a| |1 2 3| |b 4 5 6|: |b| |4 5 6|