ho provato ma c'è ancora qualcosa che non va.. i mostro del codice;

questo è il codice dove chiamo la funzione preg_replace_callback
codice:
$test="fammi ridere @risata";
$result=preg_replace_callback("/@([\w]+)/","swap_smile",$test);
print $result;
Ho provato sia così che con "swap_smile('\\1')" ma non và.

Mentre swap_smile ha il seguente codice:
codice:
function swap_smile ($str="") {
	$smiles=array(
		"affamato","aladino","amici","angelo","angelodiavolo","arrabbiato","assetato",
		"baci","baciocuore","barba","bevo","bleah","bravo","calcio","carezza","chips",
		"cioccolatini","cornuto","cuore","cupido","demolition","diavolo","dorme","dottore",
		"elefantino","evviva","felice2","felice","fiori","fischio","foto","freddo","fuma","furioso",
		"gattini","iloveyou","infermiera","innamorato","karate","ladylazo","lavadenti","lavarsi",
		"lenti","linguaccia","love","lupomannaro","malato","mammamia","mazzata","miarrendo",
		"musica","neve","nonciprovare","noo","occhiolino","pattinare","pesce","piango","pollicegiu",
		"porco","preoccupato","pugno","puzzetta","raggi","regalo","risata","risatapazza","rosablu",
		"rosarossa","saluto","salute","sbadiglio","sciare","scimmietta","serenata","serpente","slittino",
		"soldato","soldato2","sorrisetto","sospetto","spassoso","spaventato","sposi","sputo","stop",
		"telefono","topolino","triste","ubriaco","uccellino","uff","uffa"
	);
	print_r($str);
	
	if ($exist=array_search($str,$smiles)) {
		$img="<img src=\"/imgs/smile/risata.gif\" width=\"10\" height=\"10\" alt=\"\" />\n";
		return $img;
	} else return "";
}
Come vedi prendo la stringa restituita dall'espressione e la confronto con una lista prima di inserire una immagine.
Scusami se ti sembro un neofita, ma non ho mai avuto possibilità di utilizzare le espressioni regolari, quindi mo trovo un pò spiazzato.

Qualche idea ?

p.s.
Comunque grazie per l'aiuto