C#
Regex outerRegex = new Regex("<b>.*?</b>", RegexOptions.Singleline);
Regex innerRegex = new Regex("before");
string resultString = outerRegex.Replace(subjectString,
                        new MatchEvaluator(ComputeReplacement));

public String ComputeReplacement(Match matchResult) {
    // Dla kadego dopasowania zewntrznego wyraenia regularnego wykonujemy
    // wewntrzn operacj przeszukiwania i zastpowania.
    return innerRegex.Replace(matchResult.Value, "after");
}


VB.NET
Dim OuterRegex As New Regex("<b>.*?</b>", RegexOptions.Singleline)
Dim InnerRegex As New Regex("before")
Dim MyMatchEvaluator As New MatchEvaluator(AddressOf ComputeReplacement)
Dim ResultString = OuterRegex.Replace(SubjectString, MyMatchEvaluator)

Public Function ComputeReplacement(ByVal MatchResult As Match) As String
    'Dla kadego dopasowania zewntrznego wyraenia regularnego wykonujemy
    'wewntrzn operacj przeszukiwania i zastpowania.
    Return InnerRegex.Replace(MatchResult.Value, "after");
End Function


Java
StringBuffer resultString = new StringBuffer();
Pattern outerRegex = Pattern.compile("<b>.*?</b>");
Pattern innerRegex = Pattern.compile("before");
Matcher outerMatcher = outerRegex.matcher(subjectString);
while (outerMatcher.find()) {
    outerMatcher.appendReplacement(resultString,
      innerRegex.matcher(outerMatcher.group()).replaceAll("after"));
}
outerMatcher.appendTail(resultString);


JavaScript
var result = subject.replace(/<b>.*?<\/b>/g,
                              function(match) {
                                  return match.replace(/before/g, "after");
                              }
                            );


PHP
$result = preg_replace_callback('%<b>.*?</b>%',
                                  replace_within_tag, $subject);

function replace_within_tag($groups) {
    return preg_replace('/before/', 'after', $groups[0]);
}


Perl
$subject =~ s%<b>.*?</b>%($match = $&) =~ s/before/after/g; $match;%eg;


Python
innerre = re.compile("before")
def replacewithin(matchobj):
    return innerre.sub("after", matchobj.group())

result = re.sub("<b>.*?</b>", replacewithin, subject)


Ruby
innerre = /before/
result = subject.gsub(/<b>.*?<\/b>/) {|match|
    match.gsub(innerre, 'after')
}
