Io le espressioni regolari non le so usare...quindi ti do una mia soluzione "normale"...in caso nessun altro ti risponda hai una scappatoia per lo meno ^^'

Codice PHP:
function find_a_href($str)
{
    
$str stristr($str"<a");
    
$oc strpos($str">");
    
$str_part substr($str0$oc+1);
    
    
$rest substr($str$oc+1);
    
    
$str_part stristr($str_part"href");
    if(
strpos($str_part"'"))
    {
        
$str_part stristr($str_part"'");
        
$str_part substr($str_part1);
        
$oc strpos($str_part"'");
        
$str_part substr($str_part0$oc);
    }
    else if(
strpos($str_part"\""))
    {
        
$str_part stristr($str_part"\"");
        
$str_part substr($str_part1);
        
$oc strpos($str_part"\"");
        
$str_part substr($str_part0$oc);
    }
    
$str_part preg_replace("/forum/",'sito',$str_part);
    if(
stristr($rest"[url='http://miosito.it/forum']bla bla[/url] testo ancora di prova [url='http://tuosito.it/forum']bla bla 2[/url]";
print_r(explode("|"find_a_href($sorgente))); 
risultato:

codice:
Array 
( 
	[0] => http://miosito.it/sito 
	[1] => http://tuosito.it/sito 
)
La funzione ti restituisce un array con dentro tutte le occorrenze degli HREF della stringa e sostituisce "forum" con "sito".

Spero qualcun altro ti risponda usando le regex cosi cerco di impararci qualcosa