in reply to Matching terms in text

"It doesn't work" is seldom a useful problem description. After fixing  term1 and  term2 in the OPed code to be valid scalar identifiers, here's what I get:

c:\@Work\Perl\monks>perl -w -le "$term1 = 'Tesla S|Tesla model V|Tesla model|TESLA'; $term2 = 'Ford RAM truck|2020 Ford Mustand|Ford ranger|Ranger|ford|20 +20 Ford F-250|2020 Ford F250|Ford F 250'; $term1 =~ s/\-/ /g; $term2 =~ s/\-/ /g; $input = '... 2020 Ford F 250 is great but I prefer Tesla Model-V ... + '; ;; $input =~ s/\-/ /g; ;; $input =~ s/($term1)/\<1\>\<$1\>/ig; $input =~ s/($term2)/\<2\>\<$1\>/ig; ;; print $input; " ... <2><2020 Ford F 250> is great but I prefer <1><Tesla Model V> ...
This is almost your desired output except that 'Model-V' becomes 'Model V' instead of 'model-V', which I hope you can live with. :)

The root problem might have been more clear had you provided an SSCCE (see Short, Self-Contained, Correct Example) to show the code and the resulting error messages.


Give a man a fish:  <%-{-{-{-<