RegExp用于删除HTML注释

Jam*_*oks 37 html php regex

寻找匹配的正则表达式并替换(最好是PHP但无关紧要)来改变它(开始和结束只是需要保留的随机文本).

在:

fkdshfks khh fdsfsk 
<!--g1-->
<div class='codetop'>CODE: AutoIt</div>
<div class='geshimain'>
    <!--eg1-->
    <div class="autoit" style="font-family:monospace;">
        <span class="kw3">msgbox</span>
    </div>
    <!--gc2-->
    <!--bXNnYm94-->
    <!--egc2-->
    <!--g2-->
</div>
<!--eg2-->
fdsfdskh
Run Code Online (Sandbox Code Playgroud)

到这个OUT:

fkdshfks khh fdsfsk 
<div class='codetop'>CODE: AutoIt</div>
<div class='geshimain'>
    <div class="autoit" style="font-family:monospace;">
        <span class="kw3">msgbox</span>
    </div>
</div>
fdsfdskh
Run Code Online (Sandbox Code Playgroud)

谢谢.

Pau*_*lin 76

你只是想删除评论吗?怎么样

s/<!--[^>]*-->//g
Run Code Online (Sandbox Code Playgroud)

或稍微好一点(由提问者自己建议):

<!--(.*?)-->
Run Code Online (Sandbox Code Playgroud)

但请记住,HTML 不是常规的,所以使用正则表达式来解析它会导致你进入一个受伤的世界,当有人抛出奇怪的边缘情况时.

  • 除了评论之外,我没有看到任何差异.你打算让我们猜? (4认同)
  • @EugenMihailescu好吧,当你来到它时,使用非常规语言的正则表达式无论如何都是一个错误. (3认同)
  • 当您的评论中有 &gt; 时,这不起作用。更好的版本是 /(?=&lt;!--)([\s\S]*?)--&gt;/ (2认同)

小智 50

preg_replace('/<!--(.*)-->/Uis', '', $html)
Run Code Online (Sandbox Code Playgroud)

此PHP代码将从$ html字符串中删除所有html注释标记.

  • 关于修饰符的详细信息:U使其成为Ungreedy,因此只进行第一次评论.我使它不区分大小写(不知道为什么这里需要这个)s意味着在评论中也允许换行. (5认同)

Eug*_*scu 24

更好的版本是:

(?=<!--)([\s\S]*?)-->
Run Code Online (Sandbox Code Playgroud)

它匹配这些html评论:

<!--
multi line html comment
-->
Run Code Online (Sandbox Code Playgroud)

要么

<!-- single line html comment -->
Run Code Online (Sandbox Code Playgroud)

什么是最重要的它匹配这样的评论(由他人所示的正则表达式等不包括这种情况):

<!-- this is my blog: <mynixworld.inf> -->
Run Code Online (Sandbox Code Playgroud)

注意

虽然从语法上来说下面的一个是html注释,但是你的浏览器可能会以某种方式解析它,因此它可能具有特殊含义.剥离这些字符串可能会破坏您的代码.

<!--[if !(IE 8) ]><!-->
Run Code Online (Sandbox Code Playgroud)

  • 一个伟大的正则表达式在这里。但是,更改为以下内容可能会更有用,以便可以完全删除注释。```(?= &lt;!-)([\ s \ S] *?-&gt;)``` (2认同)

Pie*_*ren 16

不要忘记考虑条件评论

<!--(.*?)-->
Run Code Online (Sandbox Code Playgroud)

将删除它们.试试这个:

<!--[^\[](.*?)-->
Run Code Online (Sandbox Code Playgroud)

不过,这也将删除下层揭示的条件评论.

编辑:

这不会删除下层显示或下层隐藏的注释.

<!--(?!<!)[^\[>].*?-->
Run Code Online (Sandbox Code Playgroud)


Jam*_*oks 8

啊,我做到了,

<!--(.*?)-->
Run Code Online (Sandbox Code Playgroud)

  • 是的,谢谢你现在一切都有道理!</讽刺> (4认同)
  • @Paul:它实际上更好,因为>没有前面 - 不会结束HTML注释.改变的重要一点是使用非贪婪或最短的匹配. (4认同)
  • 哦,对,我忘记了.*?不贪心.问一个可怕的模糊问题仍然有点俗气,抱怨当有人用正则表达式回答剥离评论,然后发布你自己的"剥离评论"答案. (3认同)
  • @cube:因为已经发布了一个相同的答案,并被提问者拒绝,没有充分的理由. (2认同)
  • 我给了他一个upvote,因为尽管他顽固地拒绝解释他想要的东西,而且他拒绝解释他对我的答案不喜欢什么,当你接下来时,他的回答比矿. (2认同)