Pues entonces solo tienes que arreglar la funcion preg_match de tal forma que solo te quite el signo deseado solo si este está al principio o al final de la cadena. Ejemplo:
Código PHP:
$a = preg_replace ('/!$/' , '' , '¿exclamac!on!');
echo $a."<br/>"; // Devuelve ¿exclamac!on
$b = preg_replace ('/^¿/' , '' , '¿exclamac!on!');
echo $b; // Devuelve exclamac!on!
Saludos