Una cosa del genere?
demo: http://3v4l.org/CIcmecodice: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;