Another way. This has the advantage of being completely independent of ordering of operations, and more replacement string mappings can easily be added to the %replace hash.
(But I'm not sure how you would translate this to Java! (Maybe ask on a Java site?))c:\@Work\Perl\monks>perl -wMstrict -le "my $s = '& &lt; &gt; < > &< && +'; print qq{'$s'}; ;; my %replace = ( amp => '&', lt => '<', gt => '>', ); my ($find) = map qr{ & ($_) ; }xms, join '|', keys %replace ; $s =~ s{$find}{$replace{$1}}xmsg; print qq{'$s'}; " '& &lt; &gt; < > &< &&' '& < > < > &< &&'
Update: Here's a variation that has the advantage of avoiding what I think of as 'hidden' capture groups in qr// objects: captures that can confuse group counting when these objects are used to compose larger regexes. In the following, all captures are at the 'top' level in the m// match, so counting's easy.
c:\@Work\Perl\monks>perl -wMstrict -le "my $s = '& &lt; &gt; < > &< && +'; print qq{'$s'}; ;; my %replace = ( amp => '&', lt => '<', gt => '>', ); my ($entity) = map qr{ $_ }xms, join ' | ', keys %replace ; print $entity; ;; $s =~ s{ & ($entity) ; }{$replace{$1}}xmsg; print qq{'$s'}; " '& &lt; &gt; < > &< &&' (?^msx: lt | gt | amp ) '& < > < > &< &&'
In reply to Re: Avoid recursive replacement using regex
by AnomalousMonk
in thread Avoid recursive replacement using regex
by anirudhkumar_r
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |