laimas,
Добрый день!
Спасибо вам за помощь.
Всё утро корпел над функцией, которую вы мне посоветовали. В результате написал следующий продуманный код, посмотрите, пожалуйста:
// берём контент
$content = preg_replace_callback(
  // поочерёдно перебираем в нём все пустые строки в их окружении
  // и каждую строку проверяем на соответствие и выполняем с ней то, или иное действие
  "/[\s\S]*(^\s*$)[\s\S]*/miu",
  function( $match_before ) {
    // смотрим, если пустая строка внутри pre (записываем результат в переменную $match_after)
    if ( preg_match( "/\<pre\>[\s\S]*(^\s*$)[\s\S]*\<\/pre\>/miu", $content, $match_after ) ) {
      // и выводим вместо неё надпись, что мы внутри
      $content = preg_replace( $match_after[1], "<p>Это строка внутри pre</p>", $content );
    // в противном случае, мы берём строку, которую нашли в самом начале
    // и так как она не подошла под первое условие
    // с чистой совестью выводим вместо неё сообщение, что мы НЕ внутри
    } else {
      $content = preg_replace( $match_before[1], "<p>Это строка НЕ внутри pre</p>", $content );
    }
  },
  $content
);
Ведь алгоритм написан верно?