Я пытаюсь удалить любые комментарии, встроенные в html-файл
$data= file_get_contents($stream); <br> $data = preg_replace('<!--*-->', '', $data); <br> echo $data;
Я все еще получаю все комментарии <! – bla bla bla ->
Что я делаю не так?
Ниже regex удалит HTML-комментарии, но будет сохранять условные комментарии.
<!--(?!<!)[^\[>].*?-->
Вы можете сделать это, не используя регулярное выражение:
function strip_comments($html) { $html = str_replace(array("\r\n<!--", "\n<!--"), "<!--", $html); while(($pos = strpos($html, "<!--")) !== false) { if(($_pos = strpos($html, "-->", $pos)) === false) $html = substr($html, 0, $pos); else $html = substr($html, 0, $pos) . substr($html, $_pos+3); } return $html; }
Регулярные выражения очень трудны для того, чтобы делать то, что вы хотите здесь.
Чтобы соответствовать произвольному тексту в регулярном выражении, вам нужно .*
, А не только *
. Ваше выражение ищет <!-
, за которым следуют ноль или более -
символы, за которыми следует -->
.
s/<!--[^>]*?-->//g
включить регулярное выражение
Вы должны сделать так:
$str = "<html><!-- this is a commment -->OK</html>"; $str2 = preg_replace('/<!--.*-->/s', '', $str); var_dump($str2);