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).
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
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
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
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
Toshinou Kyouko
<!--([sS]*?)-->
Funktioniert in Javascript und VBScript auch als “.” stimmt nicht mit Zeilenumbrüchen in allen Sprachen überein
.
7849500cookie-checkRegExp zum Entfernen von HTML-Kommentarenyes