не самое красивое, но рабочее. Битые не пройдут, от параметров очищать нужно, либо условие добавит [^\?]

PHP код:
preg_match_all('!(?:\<\s*a\s*href\s*=\s*)([^<>]+)(?:\>[^<>]+<\/\s*a\s*\>)!', $subject, $result);
$result = $result[0];
цикл
дальше trim($result, '"\'')
могу больше и лучше