Вы можете использовать это:
$pattern = '~(?(DEFINE)(?<class>\bclass\s*=\s*"[^"]*?\blink\b[^"]*"))
<a\s+ [^>]*?
(?| \g<class> [^>]*? \bhref\s*=\s*"([^"]*)"
| \bhref\s*=\s*"([^"]*)" [^>]*? \g<class>)~xi';
preg_match_all($pattern, $code, $matches, PREG_SET_ORDER);
foreach($matches as $match) {
echo '<br/>' . $match[1];
}
Однако пейман Ф. имеет хороший ответ, поскольку DOM - лучший выбор для этого вид задачи.
DOM путь:
$doc = new DOMDocument();
@$doc->loadHTML($code);
$links = $doc->getElementsByTagName('a');
foreach ($links as $link) {
if (preg_match('~\blink\b~i', $link->getAttribute('class')))
echo '<br/>' . $link->getAttribute('href');
}
Что вы пробовали? –