s/(.*ing)(?:(?!bob|fred|bill).)*(more)/\1HIT\2/; #### s/ (.*ing) (?: .{0,2} | (?!bob).{3} | (?!fred|bill).{4} | .{5,} ) (more) /\1HIT\2/x; #### my %bad_words = map { $_ => 1 } qw( bob fred bill ); s/ (.*ing) (.*) (?(?{ $bad_words{$2} })\A(?!\A)) (more) /\1HIT\3/x; #### s/(.*ing)(?!bob|fred|bill).*(more)/\1HIT\2/;