使用正则表达式从源代码中删除不必要的注释

Using regex to remove unessential comments from source

这是我想出的用于从我的源代码中删除注释的表达式,它删除了除浏览器特定注释之外的所有注释。

/<\!--(?!\[if).*?-->/s

我不是 100% 理解正则表达式,但我设法 "Frankenstein" 将我在搜索 Stack 时发现的各种表达式组合在一起。这就是我如何看待这个表达式的分解,如果有人能帮助我进一步理解它,我会很高兴。

/<\!--

用于搜索我要替换的部分用斜杠转义!因为它是表达式的一部分?

(?!\[if)

表示 if 不包含 [if block?

 .*?

通配符这么说不管中间是什么?

-->

我希望表达式找到的位的结尾。

/s

告诉表达式 运行 即使表达式之间有白色 space?

我不想仅仅因为它能满足我的需要而使用代码,我想真正了解我正在使用的是什么,并学习如何在未来更好地使用它。

这个表达式效果很好,但我确实需要帮助才能更进一步。在我的源代码中,我在脚本标签 I.E.

中有代码片段
<script type="text/javascript">
  <!--
    // Main vBulletin Javascript Initialization
    vBulletin_init();
  //-->
</script>

有没有办法调整我当前的表达方式,以排除 javascript 中的 <!-- 评论?

可以看到我正在努力实现的一个例子HERE

您已经意识到正则表达式模式不适合处理编程语言。在这里,要使用的工具显然是 HTML 解析器。使用 DOM 和 XPath 的示例:

$dom = new DOMDocument;
$dom->loadHTML($html);
$xp = new DOMXPath($dom);

$comments = $xp->query('//*[not(local-name()="script")]/comment()[not(contains(.,"[if"))]');

foreach($comments as $comment) {
    $comment->parentNode->removeChild($comment);
}

echo $dom->saveHTML();