Preg_replace utilise les expressions régulières.
Prend plutôt str_replace, c'est suffisant pour ce que tu veux faire et c'est plus rapide. Il n'analyse que les chaînes et pas les expressions régulières.
$texte=str_replace("[b]","<b>",$texte);
$texte=str_replace("[/b]","</b>",$texte);
Après si tu dois remplacer des balises avec des arguments dedans (genre [size=9]) il faudra utiliser les expressions régulières....
PS: J'ai lu ça il ya quelques temps sur un blog, et je suis assez d'accord => pourquoi remplacer <b> par [b] alors que c'est moins fatigant de taper < que [ (faut presser alt-gr en plus), et en plus utiliser <b>,<i>, <a> est susceptible de faire apprendre des notions d'html aux utilisateurs de tes formulaires (en restant sur l'idée des boutons qui affichent les tags automatiquement). Tandis que le BBcode... ça ne leurs servira pas ailleurs que sur certains forums.