ciao, sinceramente io proverei un pò a rivedere l'organizzazione del database, se ti è concesso, in modo da semplificarti la vita...

forse però non ti è concesso... bisognerebbe saperne di + su come è formattato il testo del campo. Ho avuto questa idea, sono partito dal presupposto che tra un articolo e il titolo successivo ci siano sempre 3 "a capo"... spero ti possa servire.

Codice PHP:
$testo 
"Articolo 1

Questo è il primo articolo.
Lo Stato garantisce il diritto alla procreazione cosciente e responsabile, tranne la domenica che è festa.
L'interruzione volontaria della gravidanza, di cui alla presente legge, non è mezzo per il controllo delle nascite.
Lo Stato, le regioni e gli enti locali non si ritengono responsabili qualora il nascituro dovesse diventare juventino.


Articolo 2

Questo è il secondo articolo.
Il titolo del secondo articolo è distanziato dal precedente con tre \"a capo\" e noi capiamo che è un titolo grazie a questo.
I consultori familiari istituiti dalla legge 29 luglio 1975, n. 405, fermo restando quanto stabilito dalla stessa legge, assistono la donna in stato di gravidanza:
a ) informandola sui diritti a lei spettanti in base alla sua misura di reggiseno.
"
;





function 
boldiamo($testo)
{
   
// secondo me forse ha più senso riprogettare il db, però...
   // qua dividiamo la stringa in parti. il separatore è il comando "a capo"
   
$testo nl2br($testo);
   
$risultato explode("
"
,$testo);
   
// la prima riga è sempre un titolo, la boldiamo
   
echo "[b]" $risultato[0] . "[/b]

"
;
   
// ora creiamo un ciclo per formattare il resto del testo
   // quando becco 3 
 
consecutivila linea dopo sarà un titolo e la bolderò
   $tot 
count($risultato);
   
$trebr 0;
   for(
$i=1;$i<$tot;$i++)
   {
     if (
trim(str_replace("
"
,"",$risultato[$i])) != false)
     {
       if (
$trebr == 3)
       {
         echo 
"

[b]" 
$risultato[$i] . "[/b]

\n"
;
         
$trebr 0;
       }
       else
       {
         echo 
$risultato[$i] . "
\n"
;
       }
     }
     else
     {
       
$trebr $trebr 1;
     }
   }
}



boldiamo($testo);