use warnings; use strict; my $ID = '5678'; while () { my $match = /^Success.*Id-\Q$ID\E/i ... /^Success.*Id-(?!\Q$ID\E)/i; print if $match && $match !~ /E/; } __DATA__ One Success|Id-abcd Two Success|Id-1234 Three Success|Id-abcd Four Success|Id-5678 Five Success|Id-5678 Six Success|Id-9900 Seven Success|Id-5678 Eight Success|Id-0000 Nine