I'm trying to match a string (using a Perl regex) only if it doesn't start with "abc:" or "defg:", but I can't seem to find out how. I've tried something like
^(?:(?!abc:)|(?!defg:))
I'm trying to match a string (using a Perl regex) only if it doesn't start with "abc:" or "defg:", but I can't seem to find out how. I've tried something like
^(?:(?!abc:)|(?!defg:))
Lookahead (?=foo)
, (?!foo)
and lookbehind (?<=)
, (?<!)
do not consume any characters.
You can:
^(?!abc:)(?!defg:).*
or
^(?!defg:)(?!abc:).*
The order does not make a difference.
Try doing this :
^(?!(?:abc|defg):)
… or could have dropped the alternation from the original expression:
^(?:(?!abc:)(?!defg:))
This will do the task :
^(?!(defg|abc):).*
^(?:(?!abc:|defg:).)*$
Try this.See demo.
http://regex101.com/r/hQ9xT1/18
Could you please try this:
use strict;
use warnings;
use Cwd;
while(<DATA>)
{
my $line=$_;
print $line unless($line=~m/^(abc|defg*)/m);
}
__DATA__
ebc this is testing ebc
dbc this is testing dbc
defg this is testing defg
abc this is testing abc
defg this is testing defg
^(?!abc:|defg:)\s*\w+
use this regex. this will avoid line start with "abc:" and "defg:" as you want.