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 (?<=foo)
, (?<!foo)
do not consume any characters.
You can do multiple assertions:
^(?!abc:)(?!defg:)
or:
^(?!defg:)(?!abc:)
...and the order does not make a difference.
You can use De Morgan (as other answers do):
(NOT A) AND (NOT B) <=> NOT (A OR B)
...and shorten the expression to:
^(?!abc:|defg:)
Try doing this:
^(?!(?:abc|defg):)
Use this regex:
^(?!abc:|defg:)\s*\w+
This will avoid line start with "abc:" and "defg:" as you want.
… or we could have dropped the alternation from the original expression:
^(?:(?!abc:)(?!defg:))
^(?:(?!abc:|defg:).)*$
Try this. See the demo at http://regex101.com/r/hQ9xT1/18.
This will do the task:
^(?!(defg|abc):).*
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