2010-03-23 6 views
1

J'ai un peu de code php comme ceci:commentaires html PHP preg_replace avec un espace vide

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

Maintenant, je veux dépouiller le tout commentaire html de la chaîne, je sais que je dois utiliser preg_replace, mais maintenant sûr sur le regex d'y aller. Quelqu'un peut-il aider? Merci

+3

a) en double: http://stackoverflow.com/questions/2475876/php-regexto-remove-comments-but-ignore-occurances-within-strings b) Mieux vaut ne pas faire avec regex. –

Répondre

6
$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"; 

sortie

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

Ou si vous devez preg_replace,

preg_replace("/<!--.*?-->/ms","",$str); 
2

Try

preg_replace('~<!--.+?-->~s', '', $html); 
+0

C'est la seule bonne réponse sur cette page entière. J'ai ajouté un modificateur "m" aussi. – Damien

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

Utilisez le code suivant pour remplacer global:

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

supprimera tous les commentaires HTML contenu dans la chaîne $html. J'espère que cela t'aides!

+0

Lorsque j'utilisais ce code, il supprimait également le contenu apparaissant entre deux blocs de commentaires HTML distincts. Je pense que le modificateur U pourrait rendre l'expression "gourmand". Au lieu d'essayer de tordre cela, j'ai utilisé l'expression dans [la réponse de ghostdog74] (https://stackoverflow.com/a/2499137/115432) à la place qui avait. *? au lieu de (. *) et utilisé/ms au lieu de/Uis – strangerstudios

0

Ceux-ci ne fonctionnera que si vous n'avez pas 2 commentaires avec un contenu entre comme ...

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

Vous avez besoin ...

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

Le [^>] correspond à tout sauf> si pour ne pas dépasser l'appariement> chercher le suivant. Je n'ai pas testé phps regex mais il prétend être perl regex qui est par défaut "gourmand" et correspondra autant que possible. Mais puisque vous correspondez à un espace réservé spécifiquement nommé, vous avez juste besoin de la chaîne entière et d'utiliser str_replace() à la place. Et, plutôt que de remplacer les espaces réservés dans un fichier, il suffit de créer un fichier php et d'écrire les variables.

:)

+2

Non, un '>' est autorisé et est parfaitement valide dans un commentaire. Le '. *?' Lazy-dot-star est en fait la meilleure expression dans ce cas (et ne supprime pas le texte '' Im a goner "' que vous en déduisez), – ridgerunner