RegExp для снятия комментариев HTML

Ищете регулярную регулярную последовательность совпадений и заменяет (желательно 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

Спасибо.

Ответы

Ответ 1

Вы просто пытаетесь удалить комментарии? Как насчет

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

или немного лучше (предположил сам опросчик):

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

Но помните, что HTML не является регулярным, поэтому использование регулярных выражений для синтаксического анализа приведет вас в мир боли, когда кто-то бросает на него причудливые краевые случаи.

Ответ 2

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

Этот PHP-код удалит все теги комментариев html из строки $html.

Ответ 3

Не забывайте учитывать условные комментарии, так как

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

удалит их. Вместо этого попробуйте:

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

Это также приведет к устранению условных комментариев с открытым уровнем.

ИЗМЕНИТЬ:

Это не приведет к удалению скрытых или доступных вниз уровней.

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

Ответ 4

Лучшая версия:

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

Он соответствует html-комментариям следующим образом:

<!--
multi line html comment
-->

или

<!-- single line html comment -->

и , что наиболее важно, оно соответствует комментариям, подобным этому (другое выражение, показанное другими, не охватывает эту ситуацию):

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

Примечание

Хотя синтаксически тот, что приведен ниже, является комментарием html, ваш браузер может каким-то образом разбирать его и, следовательно, может иметь особое значение. Удаление таких строк может привести к повреждению вашего кода.

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

Ответ 5

А я это сделал,

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

Ответ 6

Попробуйте следующее, если ваши комментарии содержат разрывы строк:

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

Ответ 7

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

Работает в javascript и VBScript также как "." не соответствует разрыву строк на всех языках

Ответ 8

этот код также удаляет код javascript. это слишком плохо: |

здесь пример кода javascript будет удален с помощью этого кода:

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

Ответ 9

Вот моя попытка:

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

Это также приведет к удалению многострочных комментариев и не удалит скрытые скрытые или нисходящие комментарии.

Ответ 10

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;
   }
}

Ответ 11

// 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);