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