If I understand you correctly, you want to match a body tag whether or not its comes with modifiers.
You want to strip the \s from within your regex, because with it there, this won't match '<body>', but will match '<body >' and '<body one=fish two=fish>'. As some folks mentioned, you need the s before your first delimiter (/) to indicate that you're substituting one thing for another, and the s after your last delimiter to indicate that your match should be viewed as a single-line (and shouldn't stop at a newline). I think some folks responding forgot to remove the \s from within their regexs - or I got the question wrong. The i, of course, indicates case insensitivity. What we end up with is:
s/(<body.*?>)/$1$OtherStuff/si;
I would prefer, for the sake of style, to use the following instead - indicating that the characters before the > should be anything except >.
s/(<body[^>]*>)/$1$OtherStuff/si;
I also like "pushing" stuff around, so to indicate that the first instance of body should be matched, though as far as I know, it won't make a difference.
s/(<body[^>]*>)(.*)$/$1$OtherStuff$2/si;
Hope it helps!
-Adam
--
Impossible! The Remonster can only be killed by stabbing him in the heart with the ancient bone saber of Zumakalis!