正则表达式:从 html 文件中删除所有注释,但保留相同的行数

Regex : Remove all comments from html file BUT preserve same number of lines

如果文件中的注释占了 6 行,则应删除该注释并用等于注释行数的空行替换。

这是我的意思的一个小例子。鉴于 file.html 有 10 行 :

    line 1 : <!-- text
    line 2 :      text
    line 3 :      text
    line 4 :      empty line
    line 5 :      text
    line 6 : -->
    line 7 :empty line
    line 8 :text
    line 9 :empty line
    line 10 :text

预期输出为:

    line 1 :empty line
    line 2 :empty line
    line 3 :empty line
    line 4 :empty line
    line 5 :empty line
    line 6 :empty line
    line 7 :empty line
    line 8 :text
    line 9 :empty line
    line 10 :text

我当前使用的模式 preg_replace('/(?=<!--)([\s\S]*?)-->/', '', $contents); 将文件内容替换为空字符串,该空字符串不会保留与文件之前相同的行数。

请注意,任何解决方案都需要保持文件的结构,这样第 8 行和第 10 行的文本就不会改变文件中的位置。

编辑:不知道为什么这被标记为重复。它与假定的重复问题完全不同,因为人们通常想知道如何解析 dom,而不是我非常具体和集中的问题,即在不改变文件的情况下删除文件中的注释文本该文件中的行数。

您可以使用此搜索进行搜索:

(?:^\h*<!--|(?<!\A|-->\n)\G).*\R

并将其替换为 "\n"

RegEx Demo

正则表达式详细信息:

  • (?:: 启动非捕获组
    • ^: 行首
    • \h*<!--:匹配0个或多个空格后跟<!--
    • |: 或
    • (?<!\A|-->\n):如果我们有起始位置或我们有 --> + 前一个位置的换行符,则否定后视以避免匹配
    • \G: 上一场比赛的比赛结束位置
  • ):结束非捕获组
  • .*\R:匹配行中剩余的字符后跟换行符