从HTML中提取所有CSS样式(不包括用条件注释包装的样式)


extract all css styles from html (excluding the ones wrapped in conditional comments)

我需要一个正则表达式来从html文档中提取所有的样式表(<link>标记)。

目前我有preg_match_all('/<link([^>]*?)>/i',...,并且正则表达式提取样式表…很好。

但是,我需要排除在IEs条件标签中包装的样式<!--[if IE...]>bla bla<![endif]-->

有什么建议吗?

使用DOM和XPath

$dom = new DOMDocument;
$dom->loadHTMLFile('http://example.com');
$xpath = new DOMXPath($dom);
$stylesheets = $xpath->query('/html/head/link[@rel="stylesheet"]');
foreach ($stylesheets as $stylesheet) {
    echo $dom->saveHtml($stylesheet);
}

这将只打印head元素中的样式表,不包括注释节点中的样式表。如果需要进一步限制,例如通过媒体属性,那么只需将其作为另一个条件添加到Xpath查询中。

如果saveHTML在你的PHP版本中不接受节点,请参见

  • 如何返回DOMDocument的外部html ?