Hola mi amigo, y bienvenido al foro
Respecto a tu consulta, me parece que una modificación de la expresión regular que tienes que podría resultar, sería de esta forma (colocándola en medio de un segmento de código que usa el ejemplo que mencionas):
Código:
<?php
$urlContent = '<a href="http://miweb/pagina_inicio/index.html">Mi Web</a>';
preg_match_all ("/<(?:a|area).+?href\s*=" .
"\s*(?:\"(.*?)\"|'(.*?)'|(.*?)(?:\s|> )).*?<\s*\\/a\s*>/im",
$urlContent, $arr, PREG_SET_ORDER);
print "Contenido de \$arr:<br />\n<pre>\n";
var_dump ($arr);
print "</pre>\n";
?>
Hay ciertos detalles en esa expresión regular que me parece que no tienen mucho sentido, o no son demasiado precisos, como por ejemplo el segmento que supongo sirve para encontrar coincidencias de URLs que no se encuentren entre comillas sencillas o dobles: (.*?)(?:\s|> )
En cualquier caso, asumo que esa expresión fue construida de ese modo por alguna buena razón. Espero que el ejemplo anterior te sea útil al menos para guiarte... :)
Un cordial saludo