Ciao a tutti. Sto realizzando una piattaforma per la pubblicazione di news e relativi commenti per il mio sito (non mi andava di usare qualcosa di già pronto) e devo risolvere un ultimo problema prima di poterla pubblicare e utilizzare.

I testi delle news accettano dei "tag", come quelli che è possibile usare in questo forum, che permettono di formattare i testi. Ad es., inserendo un testo come [ B ]qualcosa[ /B ], questo testo viene reso come grassetto (rimpiazzando i "tag" [ B ] e [ /B ] con e ).

Il problema nasce nell'homepage che deve abbreviare i testi delle news alla stessa maniera del blog di HTML.it, ovvero troncarle in corrispondenza di un punto (anche esclamativo o interrogativo) seguito da uno spazio o da un ritorno a capo, mantenendo il testo ad una lunghezza media preimpostata. Ho utilizzato preg_match_all() per cercare i punti in questione tramite l'espressione regolare "/([.?!]\s)+/" senza problemi. Il guaio è che il testo può contenere anche "tag" [ Q ] e [ /Q ] che indicano un testo quotato e vengono resi con una coppia di tag <blockquote> e pertanto, se lo script troncasse il testo all'interno di una citazione, avrei un elemento <blockquote> non chiuso.

Quindi dovrei riuscire a scrivere un'espressione regolare che consideri solo gli spazi presenti all'esterno delle coppie [ Q ]...[ /Q ], tenendo conto che possono esserci più citazioni intervallate da testi e che le stesse citazioni possono trovarsi anche immediatamente all'inizio e alla fine del testo delle news. Le ho provate tutte, ma non ne sono venuto a capo.

Mi rendo conto che è abbastanza complesso come problema, ma spero che qualcuno di voi possa aiutarmi.