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 

Благодарю.

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

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

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

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

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

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

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

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

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

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

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

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

РЕДАКТИРОВАТЬ:

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

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

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

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

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

 <!-- multi line html comment --> 

или

 <!-- single line html comment --> 

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

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

Заметка

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

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

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

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

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

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

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

этот код также удаляет код javascript. это очень плохо: |

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

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

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

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

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

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