Регулярные выражения для парсинга HTML — не очень удобная штука. Лучше воспользоваться встроенным в PHP объектом DOM, он сделает Ваш код более простым, быстрым и надёжным:
$dom = new DOMDocument; $dom->loadHTML($html); foreach ($dom->getElementsByTagName(''a'') as $node) { echo $dom->saveHtml($node), PHP_EOL; }
Этот код выведет HTML-код всех ссылок, которые находятся в переменной $html.
Для работы с атрибутами есть следующие функции.
Проверить, существует ли атрибут href у Вашей ссылки:
if($node->hasAttribute( ''href'' )) { // ... }
Вывести значение атрибута href:
echo $node->getAttribute( ''href'' );
Изменить значение атрибута href:
$node->setAttribute(''href'', ''something else'');
Удалить атрибут href:
$node->removeAttribute(''href'');
А ещё можно работать с HTML-атрибутами непосредственно из XPath:
$dom = new DOMDocument; $dom->loadHTML($html); $xpath = new DOMXPath($dom); $nodes = $xpath->query(''//a/@href''); foreach($nodes as $href) { echo $href->nodeValue; // выводим значение атрибута $href->nodeValue = ''new value''; // задаём новое значение атрибута $href->parentNode->removeAttribute(''href''); // удаляем атрибут }