Another approach is to use something like Regexp::Assemble to create the search regex. This might advantageous if you have a large substitution table, the table is in a file, etc. This module assumes that regexes are being added by the add() method, so the map quotemeta step in that method is still highly recommended if you are searching for pure strings that might contain anything like a regex metacharacter. Sorting by length is implicit.
>perl -wMstrict -le "use Regexp::Assemble; ;; my %subs = (Xaa1 => 'foo', Xaa11 => 'bar', Xaa => 'baz',); ;; my $ra = Regexp::Assemble ->new ->add(map quotemeta, keys %subs) ->anchor_word ; print $ra->re; ;; my $s = 'Xaa Xaa1 Xaa11 Xa'; $s =~ s{ ($ra) }{$subs{$1}}xmsg; print qq{'$s'}; " (?-xism:\bXaa(?:1?1)?\b) 'baz foo bar Xa'
In reply to Re: regex/substitution question
by AnomalousMonk
in thread regex/substitution question
by slugger415
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |