Aiuto su parsing lista numerata e puntata in BBCode

Sevenjeak

Utente Attivo
27 Nov 2012
81
2
8
36
sevenjeak.altervista.org
Ho creato, per il mio nuovo sito, una funzione che compie il parsing del BBCode del testo passato tramite parametro, questo funziona tutto perfettamente, ma il problema non è questo.

Il problema è che, sto cercando di far interpretare li liste, una specie di lista puntata o numerata presente su questo forum, ma non so proprio come scrivere la mia espressioni regolare.

In poche parole vorrei che l'espressione regolare mi trasformasse questo:

Codice:
[ list ]
[ * ] primo
[ * ] secondo 
[/ list ]

In questo:

Codice:
< ul >
< li > primo</ li >
< li > secondo</ li>
</ ul >

Scusate per gli spazzi ma è per non far interpretare il codice dal forum, è possibile fare, possibilmente un'unica espressioni regolare, che:

  1. Trasformi i tag [ list ] e [/ list ] nei tag < ul > e </ ul >
  2. Contemporaneamente che trasformi il testo contenuto all'interno da [ * ] fino al ritorno a capo in < li > testo</ li>

E possibile fare questo con un'unica espressione regolare?
 
Prova cosi

PHP:
if(preg_match('/\[list\](.*)\[\/list\]/s',$st))
echo preg_replace(array('/\[list\]/','/\[\*\](.*)/','/\[\/list\]/'),array('<ul>','<li>$1</li>','</ul>'),$st);
 
Scusa ma forze mi sono spiegato male io nel primo punto, in effetti te mi hai risposto come tale, ma cercherò di spiegarti meglio cosa vorrei io.

Io ho provato facendo la trasformazione utilizzando due espressioni regolari, la prima seleziona il testo contenuto fra i tag [ list ] e lo converte nel respettivo codice html:

PHP:
preg_replace("/\[ list \](.*)\[\/ list \]/", "< ul >$1 </ ul >", $testo);

Mentre la secondo si occupa dei trasformare il tag [ * ] nel respettivo codice html:

PHP:
preg_replace("/\[ * \](.*)\[\/ * \]/", "< li >$1 </ li >", $testo);

Ora, a me, interessava sapere, più che sapere le espressioni regolari da usare, se era possibile fare tutto questo utilizzando una sola espressione regolare
 
Ultima modifica:

Discussioni simili