Una cosa del genere?

codice:
function book($id)
{
  $id = $id[1];
  
  // qui recupero il libro partendo dall'id.
  $books = array(
    'La regola dell\'equilibrio',
    'Morte in mare aperto',
    'La ballata di Adam Henry'
  );

  if (array_key_exists($id, $books)) {
    return '['.$books[$id].']';
  }
  
  return '[Libro non in archivio]';
}

$text = "I miei libri preferiti sono:\n[libro=1] e [libro=210]";
$text = preg_replace_callback("/\[libro=(.+?)\]/", 'book', $text);

echo $text;
demo: http://3v4l.org/CIcme