Hi Nick,
I believe what's going on is this, from perlre:
By default, a quantified subpattern is "greedy", that is, it will match as many times as possible (given a particular starting location) while still allowing the rest of the pattern to match. If you want it to match the minimum number of times possible, follow the quantifier with a ?.
This works for me: $line =~ s/.*?\]: //;
And although not necessary in this case, I personally prefer to be a little more explicit and I'd anchor the match: $line =~ s/^.*?\]: //;
But I'm wondering, if you're just trying to match the IP address enclosed in those brackets, why not do something like what stevieb suggested - or, taking it even further (depending on personal taste this may be a bit overkill):
use Regexp::Common qw/net/; if ($line =~ /Relay access denied/) { my @ips = $line=~/$RE{net}{IPv4}/g; print "$_\n" for @ips; }
Hope this helps,
-- Hauke D
In reply to Re: Regex substitute matches second match first?
by haukex
in thread Regex substitute matches second match first?
by Linicks
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |