Во-первых, это не проблема регулярных выражений (или, по крайней мере, не должно быть). PHP поставляется с анализатором HTML, поэтому я бы настоятельно рекомендовал использовать его.
Когда вы используете это, вам просто нужно перебрать все теги привязки, проверьте атрибут href и измените, если необходимо, затем сохраните его обратно в HTML. Например:
$dom = new DOMDocument;
$dom->loadHTML($html); // $html as a string
$anchors = $dom->getElementsByTagName('a');
for ($i=0; i<$anchors->length; $i++) {
$item = $anchors->item[$i];
$href = $item->getAttribute('href');
$host = parse_url($href, PHP_URL_HOST);
if (stripos($host, 'yahoo') !== false) {
$item->parentNode->removeChild($item);
}
}
$html = $dom->saveHTML();
Использование parse_url()
здесь необязательно. Вы можете просто проверить, содержит ли значение атрибута «yahoo» где-либо в нем, не вытаскивая только имя хоста.
Это значительно лучше и надежнее, чем любое решение на основе регулярных выражений для той же проблемы.