PHP preg_replace html комментарии с пустым пространством - PullRequest
1 голос
/ 23 марта 2010

У меня есть немного кода PHP, как это:

$test = "<!--my comment goes here--> Hello World";

Теперь я хочу убрать весь html-комментарий из строки, я знаю, что мне нужно использовать preg_replace, но теперь уверен в регулярном выражении, чтобы войти туда. Кто-нибудь может помочь? Спасибо

Ответы [ 5 ]

7 голосов
/ 23 марта 2010
$str=<<<'EOF'
<!--my comment goes here--> Hello World"
blah  <!-- my another
comment here --> blah2
end
EOF;

$r="";
$s=explode("-->",$str);
foreach($s as $v){
  $m=strpos($v,'<!--');
  if($m!==FALSE){
   $r.=substr($v,1,$m);
  }
}
$r.=end($s);
print $r."\n";

вывод

$ php test.php
Hello World"
blah  < blah2
end

Или, если вы должны preg_replace,

preg_replace("/<!--.*?-->/ms","",$str);
6 голосов
/ 13 июля 2010
preg_replace('/<!--(.*)-->/Uis', '', $html)

Удаляет все html-комментарии, содержащиеся в строке $html.Надеюсь, это поможет!

3 голосов
/ 23 марта 2010

Попробуйте

 preg_replace('~<!--.+?-->~s', '', $html);
0 голосов
/ 20 апреля 2011

Они будут работать, только если у вас нет 2 комментариев с контентом, например ...

<!--comment--> Im a goner <!--comment-->

Вам нужно ...

//preg_replace('/<!--[^>]*-->/', '', $html); // <- this is incorrect see ridgrunners comments below, you really need ...
preg_replace('/<!--.*?-->/', '', $html);

[^>] соответствует чему угодноно> чтобы не проходить мимо> поиска следующего.Я не проверял регулярное выражение phps, но он претендует на то, чтобы быть регулярным выражением perl, которое по умолчанию «жадное» и будет соответствовать как можно большему количеству.

Но так как вы сопоставляете заполнитель с определенным именем, вам просто нужна вся строка и использоватьstr_replace () вместо этого.

str_replace('<!--my comment goes here-->', $comment, $html);

И вместо того, чтобы заменять заполнители в файле, просто сделайте его php-файлом и запишите переменные.

:)

0 голосов
/ 23 марта 2010
<?php
$test = "<!--my comment goes here--> Hello World";
echo  preg_replace('/\<.*\> / ','',$test);
?>

Используйте следующий код для глобальной замены:

<?php
$test = "<!--my comment goes here--> Hello World <!--------welcome-->welcome";
echo  preg_replace('/\<.*?\>/','',$test);
?>
...