RegExp zum Entfernen von HTML-Kommentaren

Lesezeit: 6 Minuten

RegExp zum Entfernen von HTML Kommentaren
James Brooks

Suchen Sie nach einer Regexp-Sequenz von Übereinstimmungen und Ersetzungen (vorzugsweise PHP, spielt aber keine Rolle), um dies zu ändern (der Anfang und das Ende sind nur zufälliger Text, der beibehalten werden muss).

IN:

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

zu diesem 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

Danke.

RegExp zum Entfernen von HTML Kommentaren
Paul Tomblin

Versuchen Sie nur, die Kommentare zu entfernen? Wie wäre es mit

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

oder etwas besser (vom Fragesteller selbst vorgeschlagen):

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

Aber denken Sie daran, HTML ist nicht regulär, so dass die Verwendung regulärer Ausdrücke zum Analysieren Sie in eine Welt des Schmerzes führen wird, wenn jemand bizarre Randfälle darauf wirft.

  • Nein, ich möchte das IN zum OUT machen, genau so, wie es ist.

    – James Brooks

    5. Juli 09 um 20:26 Uhr

  • Außer den Kommentaren sehe ich keine Unterschiede. Wirst du uns raten lassen?

    – Paul Tomblin

    5. Juli 09 um 20:34 Uhr

  • @James Brooks, der einzige Unterschied zwischen IN und OUT besteht darin, dass IN Kommentare hat und OUT nicht. Was willst du also, außer die Kommentare zu entfernen?

    – Toon Krijthe

    7. Juli 09 um 9:06 Uhr

  • Dies funktioniert nicht, wenn Sie ein > in Ihrem Kommentar haben. Eine bessere Version wäre /(?=/

    – Eugen Mihailescu

    22. März 15 um 11:58 Uhr


  • @EugenMihailescu Nun, wenn Sie es genau nehmen, ist die Verwendung von Regexs in einer nicht regulären Sprache sowieso ein Fehler.

    – Paul Tomblin

    22. März 15 um 13:53 Uhr

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

Dieser PHP-Code entfernt alle HTML-Kommentar-Tags aus der $html-Zeichenfolge.

  • Details zu den Modifikatoren: U macht es Ungreedy und geht damit nur bis zum ersten Close-Kommentar. i macht die Groß-/Kleinschreibung unempfindlich (nicht sicher, warum das hier nötig ist) s bedeutet, dass Zeilenumbrüche auch in den Kommentaren erlaubt sind.

    – Brian Laie

    8. August 12 um 15:47 Uhr

  • +1 für Ungreedy, das speziell getrennt von der Regex aufgerufen wird, was das Verständnis/Lesen erleichtert.

    – Nathan JB

    12. August 13 um 22:56 Uhr


  • Wir verwenden dieses Skript seit einigen Jahren und es hat gut funktioniert. Aber bitte beachten Sie, dass es die Tatsache ignoriert, dass der String <!--kann innerhalb eines Javascript-Tags vorkommen und dort gültig sein. Beispiel: <script> //... <!--</script> <script type="text/javascript" src="http://.."></script> </head> <!-- body -->

    – KTB

    26. März 2015 um 17:08 Uhr


1644075787 782 RegExp zum Entfernen von HTML Kommentaren
Eugen Michailescu

Eine bessere Version wäre:

(?=<!--)([sS]*?)-->

Es passt zu HTML-Kommentaren wie diesen:

<!--
multi line html comment
-->

oder

<!-- single line html comment -->

und was am wichtigsten ist es stimmt mit Kommentaren wie diesem überein (die anderen Regex, die von anderen gezeigt werden, decken diese Situation nicht ab):

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

Notiz

Obwohl der folgende syntaktisch ein HTML-Kommentar ist, könnte Ihr Browser ihn irgendwie anders analysieren und daher eine besondere Bedeutung haben. Das Entfernen solcher Zeichenfolgen könnte Ihren Code beschädigen.

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

  • Eine großartige Regex hier. Es kann jedoch sinnvoller sein, Folgendes zu ändern, damit der Kommentar vollständig entfernt werden kann. (?=<!--)([sS]*?-->)

    – andy_roddam

    4. März 16 um 17:25 Uhr


  • das ist das beste

    – Ismail Sahin

    26. Oktober 16 um 12:12 Uhr

  • Warum konnte es nicht einfach sein (<!--[sS]*?-->) ?

    – Jarod

    19. Januar 18 um 4:12 Uhr


  • Ehrlich gesagt denke ich, dass die in diesem Kommentar @andy_roddman gepostete Lösung als einzige Lösung markiert werden sollte.

    – Fabrizio Sabato

    14. Mai 19 um 9:15 Uhr

  • @FabrizioSabato: Die Lösung von Andy ist eine wörtliche Kopie der von mir vorgeschlagenen Lösung, mit einem sehr kleinen Unterschied, der das Ergebnis überhaupt nicht verbessert. Prüfen: regex101.com/r/lUYBNb/1

    – Eugen Mihailescu

    14. Mai ’19 um 9:39 Uhr

1644075787 474 RegExp zum Entfernen von HTML Kommentaren
Pierre Wahlgren

Vergessen Sie nicht, bedingte Kommentare zu berücksichtigen, wie

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

werde sie entfernen. Versuchen Sie stattdessen Folgendes:

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

Dadurch werden jedoch auch bedingte Kommentare entfernt, die auf niedrigerer Ebene angezeigt wurden.

BEARBEITEN:

Aufgedeckte oder versteckte Kommentare auf niedrigerem Niveau werden dadurch nicht entfernt.

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

Ah, ich habe es geschafft,

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

  • @Paul: Es ist eigentlich besser, weil > nicht vorangestellt — keinen HTML-Kommentar beendet. Der wichtige Teil, der sich geändert hat, war die Verwendung eines nicht gierigen oder kürzesten Streichholzes.

    – Phil Müller

    5. Juli 09 um 20:46 Uhr

  • Ach ja, das habe ich vergessen .*? war nicht gierig. Immer noch irgendwie kitschig, eine schrecklich vage Frage zu stellen, sich zu beschweren, wenn jemand mit einer Regex antwortet, die die Kommentare entfernt, und dann Ihre eigene “Kommentar entfernen”-Antwort zu posten.

    – Paul Tomblin

    5. Juli 09 um 22:09 Uhr

  • Warum all dieses Downvoting? Die Frage war schlecht geschrieben, aber diese Antwort scheint in Ordnung zu sein.

    – Würfel

    6. Juli 09 um 7:11 Uhr

  • @cube: weil eine äquivalente Antwort bereits gepostet wurde und vom Fragesteller ohne triftigen Grund abgelehnt wurde.

    – Konrad Rudolf

    7. Juli 09 um 8:57 Uhr

  • Ich gebe ihm eine positive Stimme, denn trotz seiner hartnäckigen Weigerung, zu erklären, was er wollte, und seiner Weigerung, zu erklären, was ihm an meiner Antwort nicht gefiel, ist seine Antwort, wenn man es genau nimmt, ein kleines bisschen besser als Bergwerk.

    – Paul Tomblin

    14. September 2009 um 14:46 Uhr

1644075787 806 RegExp zum Entfernen von HTML Kommentaren
Hadrian

Versuchen Sie Folgendes, wenn Ihre Kommentare Zeilenumbrüche enthalten:

/<!--(.|n)*?-->/g

  • @Paul: Es ist eigentlich besser, weil > nicht vorangestellt — keinen HTML-Kommentar beendet. Der wichtige Teil, der sich geändert hat, war die Verwendung eines nicht gierigen oder kürzesten Streichholzes.

    – Phil Müller

    5. Juli 09 um 20:46 Uhr

  • Ach ja, das habe ich vergessen .*? war nicht gierig. Immer noch irgendwie kitschig, eine schrecklich vage Frage zu stellen, sich zu beschweren, wenn jemand mit einer Regex antwortet, die die Kommentare entfernt, und dann Ihre eigene “Kommentar entfernen”-Antwort zu posten.

    – Paul Tomblin

    5. Juli 09 um 22:09 Uhr

  • Warum all dieses Downvoting? Die Frage war schlecht geschrieben, aber diese Antwort scheint in Ordnung zu sein.

    – Würfel

    6. Juli 09 um 7:11 Uhr

  • @cube: weil eine äquivalente Antwort bereits gepostet wurde und vom Fragesteller ohne triftigen Grund abgelehnt wurde.

    – Konrad Rudolf

    7. Juli 09 um 8:57 Uhr

  • Ich gebe ihm eine positive Stimme, denn trotz seiner hartnäckigen Weigerung, zu erklären, was er wollte, und seiner Weigerung, zu erklären, was ihm an meiner Antwort nicht gefiel, ist seine Antwort, wenn man es genau nimmt, ein kleines bisschen besser als Bergwerk.

    – Paul Tomblin

    14. September 2009 um 14:46 Uhr

1644075787 423 RegExp zum Entfernen von HTML Kommentaren
Toshinou Kyouko

<!--([sS]*?)-->

Funktioniert in Javascript und VBScript auch als “.” stimmt nicht mit Zeilenumbrüchen in allen Sprachen überein

.

784950cookie-checkRegExp zum Entfernen von HTML-Kommentaren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy