... our $c; my $regex = qr{ red (?{$c|=4}) | green (?{$c|=2}) | blue (?{$c|=1}) }x; foreach my $line (@lines) { $c = 0; next if () = $line =~ /$regex/g, $c != 5; # bail on: !(red && blue) | green # do something here, got red/blue combo }