$text = preg_replace ('#([a-zäöüéèàßA-ZÄÖÜÉÈÀ0-9-_.]+)\@([a-zäöüéèàA-ZÄÖÜÉÈÀ0-9-]+)\.([a-zA-Z]{2,5})#','<a href="mailto:\\1[at]\\2[dot]\\3">\\1[at]\\2[dot]\\3</a>', $text);
Aber wäre bei diesem Beispiel nicht das "Problem" / der Effekt, dass Punkte vor dem @ nicht durch [dot] ersetzt werden?
Gruß, Volker