use strict;
my $str = '<blockquote>
<div>Stuff
<span>
<b>Things</b>
<h2>Stuff</h2>
<h3>Other</h3>
<h4>Grassy</h4>
<p>Not this</p>
<h5>More replace</h5>
</span>
</div>
</blockquote>
<b>Outside of the blockquote</b>
<h1>Should not be affected</h1>
<h2>Should not be affected either</h2>
';
my $regex = qr`(<blockquote[^>]*>
[\S\s]*?
)<(b|h[2-5])\b[^>]*>([\S\s]*?)</\2>`mxp;
my $subst = '\\1<h6>\\3</h6>';
my $result = $str =~ s`$regex`$subst`rg;
print "The result of the substitution is' $result\n";
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html