Eccolo..
io di solito quando si parla di strutture annidate me la cavo cosi'.
Sarebbe carino pero' sapere se c'e' modo di mettere tutto in una regex.

Codice PHP:
<?
function parseText($testo
{
    
$replacedTesto '';
    
$pattern "/\[span=([a-z0-9-]+)\](.+)\[\/span\]/";
    
$replacement"<span class=\"\$1\">\$2</span>";

    while ( 
) {
      
$replacedTesto preg_replace($pattern,$replacement,$testo);
      if ( 
$replacedTesto == $testo ) {
        break;
      }
      
$testo $replacedTesto;
    }

    return 
$replacedTesto;


echo 
parseText("[span=testo-italico][span=testo-grassetto]Prova doppio tag[/span][/span]");
?>
Ciao ciao