web-dev-qa-db-ja.com

HTMLコメントを削除する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

この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

ありがとう。

37
James Brooks

コメントを削除しようとしていますか?どう?

s/<!--[^>]*-->//g

または少し良い(質問者自身が提案):

<!--(.*?)-->

ただし、HTMLはnot regularであるため、正規表現を使用して解析すると、誰かが奇妙なEdgeケースを投げたときに怪我の世界につながることに注意してください。

76
Paul Tomblin
preg_replace('/<!--(.*)-->/Uis', '', $html)

このPHPコードは、$ html文字列からすべてのhtmlコメントタグを削除します。

50

より良いバージョンは次のとおりです。

(?=<!--)([\s\S]*?)-->

次のようなHTMLコメントに一致します。

<!--
multi line html comment
-->

または

<!-- single line html comment -->

最も重要なものこのようなコメントに一致します(他の正規表現はこの状況をカバーしません):

<!-- this is my blog: <mynixworld.inf> -->

構文的には以下のものはHTMLコメントですが、ブラウザは何らかの方法でそれを解析する可能性があるため、特別な意味を持つ場合があります。このような文字列を削除すると、コードが破損する可能性があります。

<!--[if !(IE 8) ]><!-->
23

条件付きコメントを考慮することを忘れないでください。

<!--(.*?)-->

それらを削除します。代わりにこれを試してください:

<!--[^\[](.*?)-->

ただし、これにより、下位レベルで明らかにされた条件付きコメントも削除されます。

編集:

これにより、下位レベルのコメントまたは下位レベルの非表示のコメントは削除されません。

<!--(?!<!)[^\[>].*?-->
16
Pierre Wahlgren

ああ、やった

<!--(.*?)-->
8
James Brooks

コメントに改行が含まれている場合は、次を試してください。

/<!--(.|\n)*?-->/g
2
Hadrian
<!--([\s\S]*?)-->

JavascriptおよびVBScriptでも「。」として機能します。すべての言語で改行と一致しない

2
Toshinou Kyouko
function remove_html_comments($html) {
   $expr = '/<!--[\s\S]*?-->/';
   $func = 'rhc';
   $html = preg_replace_callback($expr, $func, $html);
   return $html;
}

function rhc($search) {
   list($l) = $search;
   if (mb_eregi("\[if",$l) || mb_eregi("\[endif",$l) )  {
      return $l;
   }
}
1
TurkiM

これらのコードは、JavaScriptコードも削除します。それはあまりにも悪いです:|

このコードで削除されるjavascriptコードの例は次のとおりです。

<script type="text/javascript"><!--
    var xxx = 'a';
    //-->
    </script>
1
TomSawyer

私の試みは次のとおりです。

<!--(?!<!)[^\[>][\s\S]*?-->

これにより、複数行のコメントも削除され、downlevel-revealedまたはdownlevel-hiddenコメントは削除されません。

1
// Remove multiline comment
    $mlcomment = '/\/\*(?!-)[\x00-\xff]*?\*\//';
    $code = preg_replace ($mlcomment, "", $code);
// Remove single line comment
    $slcomment = '/[^:]\/\/.*/';
    $code = preg_replace ($slcomment, "", $code);
// Remove extra spaces
    $extra_space = '/\s+/';
    $code = preg_replace ($extra_space, " ", $code);
// Remove spaces that can be removed
    $removable_space = '/\s?([\{\};\=\(\)\\\/\+\*-])\s?/';
    $code = preg_replace ('/\s?([\{\};\=\(\)\/\+\*-])\s?/', "\\1", $code);
0
Mister X