in reply to using $1 as find string

It's a bit messy, but returns what you asked for.
while (<DATA>) { $_ =~ s!(b)</it>(<.+?>)<it>(cd)</it>(<.+?>)!$1$2$3$4</it>!; print $_; } __DATA__ <it>a</it>+2<it>b</it><inf><it>cd</it></inf> <it>a</it>+2<it>b</it><sup><it>cd</it></sup>