Чтобы соответствовать комментарии, вы должны думать, что есть два типа комментариев в PHP 5:
- комментарии, которые начинаются от
//
и идут до конца строки
- комментарии, которые начинаются от
/*
и перейти к */
Учитывая у вас есть эти две линии: первая
$filePath = '/home/squale/developpement/astralblog/website/library/HTMLPurifier.php';
$str = file_get_contents($filePath);
Вы могли бы соответствовать первому из них с:
$matches_slashslash = array();
if (preg_match_all('#//(.*)$#m', $str, $matches_slashslash)) {
var_dump($matches_slashslash[1]);
}
, а второй из них с:
$matches_slashstar = array();
if (preg_match_all('#/\*(.*?)\*/#sm', $str, $matches_slashstar)) {
var_dump($matches_slashstar[1]);
}
Но вы, вероятно, попасть в неприятности с «//
» в середине строки (what about heredoc syntax, btw, did you think about that one ?)
, или «переключить комментарии», как это:
/*
echo 'a';
/*/
echo 'b';
//*/
(Просто добавьте косую черту на быть gining к «тумблеры» два блока, если вы не знаете, трюк)
Итак ... Довольно трудно обнаружить комментарии только регулярное выражение ...
Другим способом было бы используйте PHP Tokenizer, который, очевидно, знает, как анализировать PHP-код и комментарии.
Для справки, см:
При том, что вы должны использовать Tokenizer на вашей строке PHP кода, итерацию по всем токенов вы получите в результате, и определить, какие из них являются комментариями.
Нечто подобное, вероятно, сделать:
$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);
}
}
И, как выход, вы получите список вещей, как это:
array
0 => int 366
1 => string '/** Version of HTML Purifier */' (length=31)
2 => int 57
или это:
array
0 => int 365
1 => string '// :TODO: make the config merge in, instead of replace
' (length=55)
2 => int 117
(Вы «просто» можете раздеть //
и /* */
, но это вам решать ; по крайней мере, вы извлекли комментарии ^^)
Если вы действительно хотите, чтобы обнаружить комментарии без какого-либо странных ошибок из-за «странный» синтаксис, я полагаю, это будет путь ;-)
Не могли бы вы получить более подробную информацию о том, чего вы пытаетесь достичь, на каком языке вы соответствуете этому * от *. – Draemon