正则表达式:从html文件中删除所有注释,但保留相同数量的行
如果文件中的注释覆盖了其中的 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('/(?=<!--)([sS]*?)-->/', '', $contents);用空字符串替换文件的内容,这不会保留与文件以前相同的行数。
请注意,任何解决方案都需要保持文件的结构,因为第 8 行和第 10 行的文本不会改变文件中的位置。
编辑:不知道为什么这被标记为重复。考虑到人们通常想知道如何解析 dom,而不是我关于在不改变文件中的行数的情况下删除文件中的注释文本的非常具体且集中的问题,它绝不类似于假设的重复问题那个文件。
回答
您可以使用此搜索进行搜索:
(?:^h*<!--|(?<!A|-->n)G).*R
并用一个替换它 "n"
正则表达式演示
正则表达式详情:
(?:: 启动非捕获组^: 一行的开始h*<!--: 匹配 0 个或多个空格后跟<!--|: 或者(?<!A|-->n):如果我们有开始位置或-->在前一个位置有+ 换行符,则负向后视以避免匹配G: 匹配上一场比赛的结束位置
): 结束非捕获组.*R: 匹配行中剩余的字符后跟换行符