my @lines = ( q(String), q(I have a String), q(I have a String and a .c), q(I have a String.c), q(String.O) ); foreach (@lines) { #Look for String, not followed by .c, .o next unless /String(?![.][coCO])/; print $_ . "\n"; } Output: String I have a String I have a String and a .c