use strict;
my $str = 'top - 11:41:04 up 21 min, 1 user, load average: 0.00, 0.01, 0.07
Tasks: 86 total, 1 running, 85 sleeping, 0 stopped, 0 zombie
%Cpu(s): 4.7 us, 2.2 sy, 0.5 ni, 92.0 id, 0.3 wa, 0.0 hi, 0.3 si,
KiB Mem: 501692 total, 475348 used, 26344 free, 13032 buffers
KiB Swap: 0 total, 0 used, 0 free. 281204 cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+
1 root 20 0 33632 2940 1468 S 0.0 0.6 0:01.87
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01
...
17836 www-data 20 0 287448 6708 2424 S 0.0 1.3 0:00.02
17914 vagrant 20 0 23528 1396 1048 R 0.0 0.3 0:00.00';
my $regex = qr/Tasks: (\d+) total, (\d+) running, (\d+) sleeping, (\d+) stopped, (\d+) zombie/p;
if ( $str =~ /$regex/ ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html