Удалить почти все комментарии 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 )

1

Решение

Это должно заменить все комментарии, которые не содержат «batcache». Соответствие выполняется между этими двумя тегами: <!-- в --> ,

$result = preg_replace("/<!--((?!batcache)(?!\\[endif\\])[\\s\\S])*?-->/", "", $str);

Вы можете проверить это Вот.

Как уже говорилось другими пользователями, не всегда безопасно анализировать HTML с помощью регулярных выражений, но если у вас есть относительная уверенность в том, какой тип HTML вы будете анализировать, он должен работать так, как ожидалось. Если регулярное выражение не соответствует конкретному сценарию использования, дайте мне знать.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]