in reply to Question for regex experts
One possible approach:
>perl -wMstrict -le "my $bad = 'x &gt;lt;amp; y >amp;lt; z &>< y lt;gt; z'; print qq{'$bad'}; ;; my $tity = qr{ (?: amp | gt | lt) ; }xms; ;; (my $fixed = $bad) =~ s{ (?: (?: \G (?<! \A)) | &) $tity \K (?= $tity) } '&'xmsg; print qq{'$fixed'}; " 'x &gt;lt;amp; y >amp;lt; z &>< y lt;gt; z' 'x &><& y >&< z &>< y lt;gt; z'
|
|---|