Ho quattro tipi di link: dal più semplice e pulito al più complesso e sporco.
Codice PHP:
$stringa1 = '<a href="funzioni/funz001.htm">La funzione Somma.se a più condizioni</a>';
$stringa2 = '<a href="funzioni/funz001.htm" target="_blank">La funzione Somma.se</a>';
$stringa3 = '<a class="stile_link" href="http://www.miosito.it" title="Blah blah..">Vai qui.</a>';
$stringa4 = '<li><a ". (($choice == "info") ? " class=\'currentN\'" : "") . " href="inf_record.php?settore=lab_mysql&choice=info&pref=inf&file=inf_record">Informazioni sui record</a></li>';
Da questi 4 link debbo estrarre il nome del file da aprire e la didascalia che accompagna ciascun link.
Per estrarre questi elementi ho questi pattern.
I primi due estraggono il nome del file e mi sembrano equivalenti ma nel codice uso il secondo.
Il terzo pattern estrae la didascalia che accompagna i vari link.
Codice PHP:
//$pattern_1 = '#href="(.*?)"#';
$pattern_1 = '(href="(.*?)")';
$pattern_2 = '#">(.*?)</a\>#si';
Il problema da risolvere
Le didascalie vengono prelevate senza alcun problema usando il pattern_2.
Per l'estrazione del nome del file c'è un problema.
Mentre dai primi tre link il nome della pagina viene prelevato regolarmente con uno dei primi due pattern_1, dal quarto link assieme al nome della pagina viene prelevata anche la Querystring che l'accompagna.
codice:
funzioni/funz001.htm
funzioni/funz001.htm
http://www.miosito.it
inf_record.php?settore=lab_mysql&choice=info&pref=inf&file=inf_record
C'è un modo, aggiustando uno dei due pattern_1, far sì che la stessa espressione regolare si comporti bene anche col link più complesso?
Spero che il problema si possa risolvere. 
Grazie per l'interessamento. 
PS: l'estrazione la eseguo con questa istruzione:
preg_match($pattern_1,$stringa4,$page4);
e poi la leggo con
echo $page4[1] . "<hr />\n";