我需要一个正则表达式来从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 ?