Like Michael pointed out, bu amaç için Regex kullanmak istemiyorum. Bir Regex bir öğe etiketi ne olduğunu bilmiyor. Bunu farkı öğretmek sürece <foo> >foo< olarak anlamlıdır. Farkı öğretmek olsa inanılmaz derecede sıkıcı.
DOM çok daha uygundur:
$html = <<< HTML
<img src="" style="display:none" />
<IMG src="" style="width:11px;display: none" >
<img src="" style="width:11px" >
HTML;
Yukarıdaki (geçersiz) biçimlendirme. Biz bu gibi DOM onu beslemek:
$dom = new DOMDocument();
$dom->loadHtml($html);
$dom->normalizeDocument();
Şimdi metin "ekran" içeren bir "stil" özniteliği içeren tüm "IMG" elemanları için DOM sorgulayabilirsiniz. XPath'daki: "hiçbiri ekran", ama bizim giriş biçimlendirme inbetween hiçbir boşluk tekrarlarını vardır Biz sorgulamak olabilir:
$xpath = new DOMXPath($dom);
foreach($xpath->query('//img[contains(@style, "display")]') as $node) {
$style = str_replace(' ', '', $node->getAttribute('style'));
if(strpos($style, 'display:none') !== FALSE) {
$node->parentNode->removeChild($node);
}
}
Biz IMG düğümler üzerinde yineleme ve kendi stili özniteliği içerikten tüm boşlukları kaldırın. Sonra biz "display: none" içeriyorsa, kontrol ve eğer öyleyse, DOM öğeyi kaldırın.
Şimdi biz sadece HTML kaydetmek gerekir:
echo $dom->saveHTML();
bize verir:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><img src="" style="width:11px"></body></html>
Vida Regex!
Zeyilname: Ayrıca Parsing XML documents with CSS selectors ilginizi çekebilir