不是注释的HTML标签正则表达式

4

我需要在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
使用贪婪正则表达式 .* 解析 HTML 大多数情况下并不是很好。你确定要使用正则表达式吗?这可能会变得有点复杂... - HamZa
1
对于那些感兴趣的正则表达式解决方案,可以在这里查看:http://regex101.com/r/vV0jK9。 - HamZa
请尝试这个链接:https://dev59.com/2W855IYBdhLWcg3woV7M#4234491。 - tchrist
1个回答

4
你应该使用DOMDocument类来解析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');

}

输出:

xyz/dzgt/style.css

2
是的 - 每当有人试图使用 RegExp 解析 HTML/XML 时,上帝就会杀一只小狗,这是事实! - CD001

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接