in reply to regex remove blank/whitespace until first occurrence of specific character "["
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.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: regex remove blank/whitespace until first occurrence of specific character "["
by thanos1983 (Parson) on Mar 03, 2015 at 09:23 UTC |