Не очень понял что вам надо но:
// Удалить собаку
$tag = preg_replace("/@/ism", "", $tag);
// Удалить собаку если это первый символ
$tag = preg_replace("/^@/ism", "", $tag);
//поставить пробел перед собакой если его нет
$tag = preg_replace("/@/ism", " @", $tag);
UP
$tag = str_replace("@", "@", $tag, $gav);
$tag = str_replace("#", "#", $tag, $re);
if($gav > 0 && $re > 0){
// есть оба тега, один удалить
}
elseif($gav > 1){
// собаки две, одну удалить
}
elseif($re > 1){
// решётки две, одну удалить
}
else{
// всё в порядке, действия по дефолту
}
Ну на самом деле собак или решёток может быть 3,4 или больше и тогда это тоже будет удовлетворять условиям, но удалять надо будет уже не одну, ну это сами подумаете как вам надо