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