Non sarebbe meglio verificare prima l'esistenza della chiave univoca e, nel caso esista già, gestire l'eccezione piuttosto che fare il parsing di un errore SQL a posteriori?

Comunque:

codice:
preg_match('#Integrity constraint violation: 1062 Duplicate entry \'(.*?)\'#si', $error, $matches);