preg_replace preg_match'de olduğu gibi "/" ile başlayıp "/" ile bitmeli.
$text=preg_replace("/@[^A-Za-z0-9\-_ĞÜŞİÖÇğüşıöç]+@/i","",$text);
$text=preg_replace("/ +/"," ",trim($text));
$text=preg_replace("/[-]+/","-",$text);
$text=preg_replace("/[_]+/","_",$text);
! Kodları test etmedim.