use strict; use warnings; while () { print "matched $_" if /^[^cat)(?:]/; } __DATA__ cat dog dog cat aardvark ant catnip dogbone frog cat dog mouse dog cat cat dog elephant can of worms #### matched dog cat matched frog cat dog matched mouse dog cat #### use strict; use warnings; while () { print "matched $_" if /^(?!cat\b).*(?=\bdog$)/; } __DATA__ cat dog dog cat catnip dogbone aardvark ant frog cat dog can of worms #### matched frog cat dog