Alguna que otra vez me he terminado topando con las expresiones regulares. Son extremadamente potentes pero también un dolor de cabeza.

En php podemos usar lo siguiente:


$pattern = array("/[br]/i",
"/[i](.*?)[/i]/i",
"/[u](.*?)[/u]/i",
"/[b](.*?)[/b]/i",
);
$replace = array("<br>",
"<i>1</i>",
"<u>1</u>",
"<b>1</b>",
);
$text = preg_replace ($pattern, $replace, $text);

Este código sustituye algunos bbcode por html, tomando un array de patrones y reemplanzándolos por array $replace (el primer elemento de $pattern lo sustituye por el primero de $replace y así sucesivamente)

Como puedes ver, los patrones se ponen entre ‘/’ (/patron/) y al final hay una ‘i’ que indica case-insensitive.
Esa ‘i’ es el modificador. También podemos usar ‘U’ ungreedy (no codicioso)
Con 1 indicamos que queremos capturar el primer paréntesis.

Otro día cuento lo de Greedy pero adelanto que por por defecto los patrones son codiciosos.