Reliable Regex for HTML are difficult. Вот как сделать это с DOM:
$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('a') as $node) {
echo $dom->saveHtml($node), PHP_EOL;
}
выше будет найти и выводить "outerHTML" всех A
элементов в $html
строке.
Чтобы получить все текстовые значения узла, вы
echo $node->nodeValue;
Для проверки если атрибут href
существует вы можете сделать
echo $node->hasAttribute('href');
Чтобы получить в href
атрибут вы бы сделали
echo $node->getAttribute('href');
Для измененияhref
атрибута вы могли бы сделать
$node->setAttribute('href', 'something else');
Чтобы удалить href
атрибутов вы могли бы сделать
$node->removeAttribute('href');
Вы также можете запросить для атрибута href
напрямую с XPath
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//a/@href');
foreach($nodes as $href) {
echo $href->nodeValue; // echo current attribute value
$href->nodeValue = 'new value'; // set new attribute value
$href->parentNode->removeAttribute('href'); // remove attribute
}
Также см:
На заметка на полях: Я уверен, что это дубликат, и вы можете find the answer somewhere in here
Надежное регулярное выражение для синтаксического анализа HTML по своей сути невозможно даже, поскольку HTML не является обычным языком. – Asciiom