Используя это выражение регулярного выражения:Удалить почти все HTML комментариев с помощью Regex
preg_replace('/<!--(?!<!)[^\[>].*?-->/', '', $output)
Я могу удалить все HTML-комментарии с моей страницы за исключением всего, что выглядит следующим образом:
<!--[if IE 6]>
Special instructions for IE 6 here
<![endif]-->
Как могу ли я изменить это, чтобы исключить комментарии HTML, которые включают уникальную фразу, такую как «batcache»?
Таким образом, HTML-комментарий это:
<!--
generated 37 seconds ago
generated in 0.978 seconds
served from batcache in 0.004 seconds
expires in 263 seconds
-->
не будут удалены.
Этот код, кажется, сделать трюк:
preg_replace('/<!--([\s\S]*?)-->/', function($c) { return (strpos($c[1], '<![') !== false || strpos($c[1], 'batcache') !== false) ? $c[0] : ''; }, $output)
Почему вы не используете 'strip_tags'? и добавить специальные условные комментарии? –
** Не используйте регулярные выражения для анализа HTML. Используйте подходящий модуль синтаксического анализа HTML. ** Вы не можете надежно проанализировать HTML с регулярными выражениями, и вы столкнетесь с печалью и разочарованием в будущем. Как только HTML изменится с ваших ожиданий, ваш код будет сломан. См. Http://htmlparsing.com/php или [этот поток SO] (http://stackoverflow.com/questions/3577641/how-do-you-parse-and-process-html-xml-in-php) для примеры правильного анализа HTML с PHP-модулями, которые уже были написаны, протестированы и отлажены. –