#!/usr/bin/perl use strict; use warnings; my $tag = '(?:<[^>]*>)'; sub word { my $word = shift; qr /$tag*$word/; } while () { s/((??{ word 'tacos' }))/yummy $1/g; s/((??{ word 'salad' }))/green $1/g; print; } __DATA__ I like tacos. <5b>I <5c>like <5d>tacos. I like a salad. I like a salad. I like a salad with tacos. I like yummy tacos. <5b>I <5c>like yummy <5d>tacos. I like a green salad. I like a green salad. I like a green salad with yummy tacos.