正则表达式未标注的html标记

时间:2014-02-26 10:38:29

标签: php html regex

我需要在html中查找未注释的所有<link />标记。

例如,在html中:

<link rel="stylesheet" href="xyz/dzgt/style.css" />
<!--[if IE 7]>
<link rel="stylesheet" type="text/css" href="xyz/dzgt/ie7.css" />
<![endif]-->

我需要匹配<link rel="stylesheet" href="xyz/dzgt/style.css"/>但不匹配<link rel="stylesheet" type="text/css" href="xyz/dzgt/ie7.css" />的正则表达式,因为它被<!-- -->包围。

我可以使用以下正则表达式<link />找到所有/<link.*href="(.*\.css)".*\/>/m个标签,但它也会与已评论的标签相匹配,但我只需要对这些标签进行评论。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

您应该使用DOMDocument Class而不是regex来解析HTML。查看this.

<?php
$html='<link rel="stylesheet" href="xyz/dzgt/style.css" />
<!--[if IE 7]>
<link rel="stylesheet" type="text/css" href="xyz/dzgt/ie7.css" />
<![endif]-->';
$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('link') as $tag) {
        echo $tag->getAttribute('href');

}

<强> OUTPUT :

xyz/dzgt/style.css