#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use constant
STATUS_COMPLETED_RE => qr{ ^string-here \s string-here: \s
\((\w+)\) \s #alarm level
([\w|\s]+) \s completed, \s #job completed
Total\s (\d+) \sclient\(s\), \s #total clients
( #Details -
(\d+) \s # number
([\w|\s\(\)]+) ,|\. # succeed,fail,etc.
)* # any number of
}xms
;
my @sample_str = ('string-here string-here: (alarm_level_5) group5 completed, Total 55 client(s),',
'string-here string-here: (alarm_level_2) group2 completed, Total 22 client(s), 422 succeed,622 fail,911 no_pass.');
my (@data, %stats);
for my $line ( @sample_str ) {
if (@data = ($line =~ STATUS_COMPLETED_RE )) {
print Data::Dumper->Dump([\@data], [qw/*data/]);
$stats{level} = shift @data;
$stats{group} = shift @data;
$stats{total} = shift @data;
}
else {
print "No match\n";
}
}
print Data::Dumper->Dump([\%stats], [qw/*stats/]);
####
C:\perlp>perl try.pl
No match
@data = (
'alarm_level_2',
'group2',
'22',
'622 fail,',
'622',
'fail'
);
%stats = (
'group' => 'group2',
'level' => 'alarm_level_2',
'total' => '22'
);
C:\perlp>C:\perlp>
####
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use constant
STATUS_COMPLETED_RE => qr{ ^string-here \s string-here: \s
\((\w+)\) \s #alarm level
([\w\s]+) \s completed, \s #job completed
Total\s (\d+) \sclient\(s\), \s? #total clients
((?: #Details -
\d+ \s # number
[\w\s\(\)]+ [,.] # succeed,fail,etc.
)*) # any number of
}xms
;
my @sample_str = ('string-here string-here: (alarm_level_5) group5 completed, Total 55 client(s),',
'string-here string-here: (alarm_level_2) group2 completed, Total 22 client(s), 422 succeed,622 fail,911 no_pass.');
my (@data, %stats);
for my $line ( @sample_str ) {
if (@data = ($line =~ STATUS_COMPLETED_RE )) {
print Data::Dumper->Dump([\@data], [qw/*data/]);
$stats{level} = shift @data;
$stats{group} = shift @data;
$stats{total} = shift @data;
}
else {
print "No match\n";
}
}
print Data::Dumper->Dump([\%stats], [qw/*stats/]);
####
C:\perlp>t1.pl
@data = (
'alarm_level_5',
'group5',
'55',
''
);
@data = (
'alarm_level_2',
'group2',
'22',
'422 succeed,622 fail,911 no_pass.'
);
%stats = (
'group' => 'group2',
'level' => 'alarm_level_2',
'total' => '22'
);
C:\perlp>
####
my $start = 'string-here string-here:';
my $level = '\((\w+)\)';
my $group = '([\w\s]+) completed,';
my $total = 'Total (\d+) client\(s\),';
# if there are details, they're captured in the end parens
my $re = qr/^$start $level $group $total ?(.*)$/;