Sto facendo, per la nuova versione del sito, una funzione, che trasforma il testo, contenente il codice bb, con il suo respettivo codice html, usando le espressioni regolari, fino ad ora la funzione e questa:

Codice PHP:
function BBCode($text)
{
   
$bb = array(
      
"/\[b\](.*?)\[\/b\]/is",
      
"/\[i\](.*?)\[\/i\]/is",
      
"/\[u\](.*?)\[\/u\]/is",
      
"/\[left\](.*?)\[\/left\]/is",
      
"/\[center\](.*?)\[\/center\]/is",
      
"/\[right\](.*?)\[\/right\]/is",
      
"/\[code\](.*?)\[\/code\]/is",
      
"/\[color='(.*?)'\](.*?)\[\/color\]/is",
      
"/\[size='(.*?)'\](.*?)\[\/size\]/is",
      
"/\[link='(.*?)'\](.*?)\[\/link]/is",
      
"/\[list\](.*?)\[\/list]/is",
      
"/\[\*\](.*?)\n/is",
   );
   
   
$html = array(
      
"[b]$1[/b]",
      
"[i]$1[/i]",
      
"<u>$1</u>",
      
"<div align=\"left\">$1</div>",
      
"<div align=\"center\">$1</div>",
      
"<div align=\"right\">$1</div>",
      
"<code>$1</code>",
      
"<font color=\"$1\">$2</font>",
      
"<font size=\"$1\">$2</font>",
      
"<a href=\"$1\" target=\"_Blank\">$2</a>",
      
"<ul>$1[/list]",
      
"[*]$1",
   );
   
   return 
preg_replace($bb$html$text);

Come vedete la funzione restituisce il testo, passato per parametro, dopo avendo fatto il parsing del BBCode.

Il problema, ovvero non è un problema, ma una miglioria che vorrei applicare io, e chè: se l'utente scrive nel testo il tag [ * ] ( ultima espressione nell'array $bb ), anche senza dichiararlo dentro la lista [ list ] ( espressione sopra all'ultima ), il tag [ * ] mi viene tradotto semplicemente in < li >.

La mia domanda è questa, è possibile ( modificando l'ultima espressione o unendo le ultime due ) avere lo stesso risultato, solo se il tag o i tags [ * ] si trovano solo all'interno di [ list ]? non so se mi spiego.