Pour correspondre des commentaires, vous devez penser il y a deux types de commentaires en PHP 5:
- commentaires qui commencent par
//
et vont jusqu'à la fin de la ligne
- commentaires qui commencent par
/*
et allez à */
Considérant que vous avez ces deux premières lignes:
$filePath = '/home/squale/developpement/astralblog/website/library/HTMLPurifier.php';
$str = file_get_contents($filePath);
Vous pouvez faire correspondre les premiers avec:
$matches_slashslash = array();
if (preg_match_all('#//(.*)$#m', $str, $matches_slashslash)) {
var_dump($matches_slashslash[1]);
}
Et les seconds avec:
$matches_slashstar = array();
if (preg_match_all('#/\*(.*?)\*/#sm', $str, $matches_slashstar)) {
var_dump($matches_slashstar[1]);
}
Mais vous obtiendrez probablement dans des ennuis avec « //
» au milieu de la chaîne (what about heredoc syntax, btw, did you think about that one ?)
, ou « basculer les commentaires » comme ceci:
/*
echo 'a';
/*/
echo 'b';
//*/
(il suffit d'ajouter une barre oblique à l'être gining à « bascule » les deux blocs, si vous ne connaissez pas l'affaire)
Alors ... Tout à fait difficile de détecter des commentaires seulement ... regex
Une autre façon serait de utilisez le PHP Tokenizer, qui, évidemment, sait comment analyser le code PHP et les commentaires.
Pour les références, voir:
Avec cela, vous devez utiliser la tokenizer sur votre chaîne de code PHP, itérer sur tous les jetons que vous obtenez par conséquent, et détecter ceux qui sont des commentaires.
Quelque chose comme cela ferait sans doute:
$tokens = token_get_all($str);
foreach ($tokens as $token) {
if ($token[0] == T_COMMENT
|| $token[0] == T_DOC_COMMENT) {
// This is a comment ;-)
var_dump($token);
}
}
Et, en tant que sortie, vous obtiendrez une liste de choses comme ceci:
array
0 => int 366
1 => string '/** Version of HTML Purifier */' (length=31)
2 => int 57
ou ceci:
array
0 => int 365
1 => string '// :TODO: make the config merge in, instead of replace
' (length=55)
2 => int 117
(Vous "juste" pourrait dépouiller le //
et /* */
, mais c'est dépend de vous ; au moins, vous avez extrait les commentaires ^^)
Si vous voulez vraiment détecter des commentaires sans aucune sorte d'erreur étrange en raison de la syntaxe « étrange », je suppose que ce serait la voie à suivre ;-)
Pourrait faire avec un peu plus d'informations sur ce que vous essayez d'atteindre, dans quelle langue vous correspondez * à *. – Draemon