Si quieres hacerlo en simple.
define (BB_REGEX, '/[(b|i|s|u)](.*?)[\/\1]/');
function bbCode($texto)
{
return preg_replace(BB_REGEX, '<$1>$2</$1>', $texto);
}
Edit: #1, anda que la has hecho buena con todos los preg_replace
Puedes usar arrays 'paralelos' como parámetros y el modificador i para no distinguir mayúsculas/minúsculas.
Toma, lo tuyo en mejor.
$images = array (
array ('', '', '', ':S', '', '', '', '', ':o', ':$'),
array ('url1', 'url2', '...'),
);
$bbtags = array (
array ('/[(b|i|u|center|)](.?)[\/\1]/i', '/[url=(.?)](.?)[\/url]/', '/[img](.?)[\/img]/'),
array ('<$1>$2</$1>', '<a href="$1">$2</a>', ''),
);
function bbCode ($var)
{
global $images, $bbtags;
$var = preg_replace($bbtags[0], $bbtags[1], $var);
$var = str_ireplace($images[0], $images[1], $var);
return $var;
}
Lo del coloreado de PHP:
function colorea($str)
{
return '<pre>' . highlight_string($str[1]) . '</pre>';
}
function bbCode($str)
{
return preg_replace_callback('/[code](.*?)[\/code]/', 'colorea', $str);
}