<?php
$content = <<<'EOD'
<pre class="prettyprint linenums">
<?php
if($hoge == 'hoge') {
  echo 'hoge!';
}
<span class="nocode">text</span>
</pre>
?>
EOD;
?>

といったソースコードを Wordpress に表示させるとき、ソースコードの部分を htmlspecialchars で実体参照変換して表示させる。
しかし、ソースコード内に注釈を入れる場合は <span class="nocode"> 注釈 </span> を利用したい。
<span class="nocode"> 注釈 </span> に対しては実体参照変換をせずに表示したい。
もしくは、<span class="nocode"> から始まる行は実体参照変換せずに表示したい。
もしくは、$content を実体参照変換した後に <span class="nocode">~</span> の行を htmlspecialchars_decode する。

現状

preg_replace_callback$content 内の文字列を抽出、置換

$content = preg_replace_callback(
  '/<pre(.*?)>(.+?)\<\/pre\>/s',
  function ($matchese){
    return htmlspecialchars($matchese[2], ENT_QUOTES, 'UTF-8');
  },
  $content
  );

$contentvar_dump すると

string(131) "
&lt;?php
if($hoge == &#039;hogeho&#039;) {
  echo &#039;hoge&#039;;
}
&lt;span class=&quot;nocode&quot;&gt;nocode&lt;/span&gt;

?>"

と、中身を実体参照変換することができました。

<span class="nocode"> 注釈 </span> がソースコード内に入っていない場合はいいのですが、入っている場合のみ、 <span class="nocode"> 注釈 </span> の部分だけを変換したくありません。

この場合はどのようにしたらいいでしょうか?

ご回答お待ちしております。