The following modification to the regular expression gives your desired output (I took no assumptions about the format of the text following a timestamp):
#!/usr/bin/env perl use strict; use warnings; use Data::Dumper; my $initialStr = "[20150302 22:01:05] [1, 2, 3, 4] String0\n [20150302 + 22:01:05] [1, 2, 3, 4] String1\n [20150302 22:01:05] [1, 2, 3, 4] St +ring2\n [20150302 22:01:05] [1, 2, 3, 4] String3\n [20150302 22:01:05 +] [1, 2, 3, 4] String4\n [20150302 22:01:05] [1, 2, 3, 4] String5\n [ +20150302 22:01:05] [1, 2, 3, 4] String6\n [20150302 22:01:05] [1, 2, +3, 4] String7\n"; my @matches = $initialStr =~ /\[\d+ \d{2}:\d{2}:\d{2}\]\s+(.+)\n/g; print Dumper \@matches;
This assigns the text after the timestamp and all following whitespace to an element of @matches.
As to why the following regular expression doesn't work:
my @matches = ( $initialStr =~ /\d+:\d+:\d+/ );
What happens here is $initialStr =~ /\d+:\d+:\d+/ is being evaluated in scalar context because of the parentheses making it a single element of a list. Therefore, the result you get is the number of occurences of the given pattern in $initialStr and since /g is not used it's either 0 or 1.
Furthermore, to capture matches into an array, which is what you're trying to do here, you need to add capture groups into the regular expression.
In reply to Re: regex remove blank/whitespace until first occurrence of specific character "["
by kroach
in thread regex remove blank/whitespace until first occurrence of specific character "["
by thanos1983
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |