#!/usr/bin/perl my %entities = map { $_ => 1 } qw(& " < >   ©); while (my $line = ) { $line =~ s/(&(\w+?;)?)/exists $entities{$1} ? $1 : "&$2"/eg; print $line; } __DATA__ foo & " bar &blah; &foo baz & ... TEST&TEST;A&E&an   HTML---   string - < © TVS> #### foo & " bar &blah; &foo baz & ... TEST&TEST;A&E&an   HTML---   string - < © TVS>