s/&((?:(#\d+|0x[\da-f]+)|([a-z0-9]+));?)?/ $2 ? "&$2;" # numerical : $3 && $isname{$3} ? ($3 eq 'apos' ? "'" : "&$3;") # named : ($1 ? "&$1" : "&") # not an entity /gie;