Wenn Sie nach einer Regex-Folge von Übereinstimmungen und Ersetzungen suchen (vorzugsweise PHP), können Sie dies ändern (Start und Ende sind nur zufälliger Text, der beibehalten werden muss).
IM:
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
Vielen Dank.
Versuchen Sie nur, die Kommentare zu entfernen? Wie wäre es mit
s/<!--[^>]*-->//g
oder das etwas bessere (vom Fragesteller selbst vorgeschlagen):
<!--(.*?)-->
Denken Sie jedoch daran, dass HTML nicht regelmäßig ist. Wenn Sie also reguläre Ausdrücke zum Analysieren verwenden, werden Sie in eine Welt voller Verletzungen geraten, wenn jemand bizarre Edge-Fälle darauf wirft.
preg_replace('/<!--(.*)-->/Uis', '', $html)
Dieser PHP -Code entfernt alle HTML-Kommentar-Tags aus der $ html-Zeichenfolge.
Eine bessere Version wäre:
(?=<!--)([\s\S]*?)-->
Es passt zu folgenden HTML-Kommentaren:
<!--
multi line html comment
-->
oder
<!-- single line html comment -->
und was ist das Wichtigste es passt zu Kommentaren wie folgt (die anderen von anderen dargestellten Regex behandeln diese Situation nicht)
<!-- this is my blog: <mynixworld.inf> -->
Hinweis
Obwohl der folgende Code syntaktisch ein HTML-Kommentar ist, wird er möglicherweise von Ihrem Browser auf andere Weise analysiert und hat daher eine besondere Bedeutung. Durch das Entfernen solcher Zeichenfolgen kann Ihr Code beschädigt werden.
<!--[if !(IE 8) ]><!-->
Vergessen Sie nicht, bedingte Kommentare wie zu berücksichtigen
<!--(.*?)-->
wird sie entfernen. Versuchen Sie es stattdessen:
<!--[^\[](.*?)-->
Dadurch werden jedoch auch die von Downlevel enthüllten bedingten Kommentare entfernt.
BEARBEITEN:
Kommentare, die auf der Ebene der Ebene angezeigt werden, werden nicht entfernt.
<!--(?!<!)[^\[>].*?-->
Ah ich habe es geschafft,
<!--(.*?)-->
Versuchen Sie Folgendes, wenn Ihre Kommentare Zeilenumbrüche enthalten:
/<!--(.|\n)*?-->/g
<!--([\s\S]*?)-->
Funktioniert in Javascript und VBScript auch als "." stimmt nicht mit Zeilenumbrüchen in allen Sprachen überein
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;
}
}
dieser Code entfernt auch Javascript-Code . das ist schade: |
hier wird der Beispiel-Javascript-Code mit diesem Code entfernt:
<script type="text/javascript"><!--
var xxx = 'a';
//-->
</script>
Hier ist mein Versuch:
<!--(?!<!)[^\[>][\s\S]*?-->
Dadurch werden auch mehrzeilige Kommentare entfernt, und es werden keine nachgeschalteten oder nachgeschalteten Kommentare entfernt.
// 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);