PREG REPLACE

http://cz2.php.net/manual/cs/function.preg-replace.php
co se dá do závorek se pak objeví v proměnných $1 $2 atd, podle pořadí.
i např. ((.*)\.(.*)) pro jméno souboru, v $1 bude celé jméno, $2 část před příponou, $3, část za příponou.
std příklad na prohození jména a příjmení:
$a = "Marek Přikryl";
$a = preg_replace('/(\S*) (\S*)/', "$2 $1", $a);
echo $a; # Přikryl Marek
Mam smajlíky, který potřebuju nahradit. Jenže přes str_replace to fachá normálně, ale tam je nevýhoda že nemůžu kontrolovat mezery. Tak to chci udělat přes preg_replace* ale tam mi to píše že to nechce lomítka a zpětný lomítka. Ale smajlíci je samozřejmě obsahujou. A jak mam udělat, aby se nahradil smajlík takhle: /mezera/:)/mezera/ a ne prostě jen takhle :) . Totiž já to můžu udělat takhle *2 ale když je víc smajlů vedle sebe tak se nahradí jenom jeden, protože těm zbylým "uradne" ty mezery.

*
while($r12=@MySQL_Fetch_Array($result12)):
$textd = preg_replace("/\s$r12[hodnota]\s/", "<img src=\"$r12[obrazek]\" border=\"0\">", $textd);
endwhile;

*2
while($r12=@MySQL_Fetch_Array($result12)):
$textd = str_replace(" $r12[hodnota] ", "<img src=\"$r12[obrazek]\" border=\"0\">", $textd);
endwhile;
Tak už jsem si myslel že mam vystaráno akorát jsem u toho obrázku dal taky mezery (že mě to nenapadlo, hodinu sem se s tim trápil :( ) ale průser. Když je smajl na začátku řádku tak se nenahradí. A proč tam musim kontrolovat mezery? Protože :) je něco jinýho než >:)

Takhle mi to jede, dokud smajl neni na začátku řádku:
$textd = str_replace(" $r12[hodnota] ", " <img src=\"$r12[obrazek]\ " border=\"0\">", $textd);
Tak a do třetice všeho dobrýho. Jenom nevim proč to vždycky napišu a pak na to přijdu ;(

Na začátek a na konec textu jsem nastavil mezery a pak jsem ještě dal mezeru před a za každý odřádkování...
Co tam tak tyhle věci zahrnout, tedy hledat preg_replace('/[\s^]+$smajlik[\s$]+/')...
případně jiné přípustné znaky.