2013-08-27 4 views
0

У меня есть файл с комментариями вверху.Поиск комментариев в строке

например.

/** 
* Comments for file. 
* 
*/ 

Использование PHP, я прочитал содержимое файла с помощью file_get_contents в переменную теперь я хочу, чтобы получить значение присутствует внутри комментария. В приведенном выше примере ожидаемым результатом будет

* Comments for file 
* 
* 

Это означает, что я хочу содержимое внутри этих/** и * /. Этот файл может содержать несколько комментариев, но я хочу, чтобы первый из них находился в верхней части файла.

Любые идеи/помощь, пожалуйста?

UPDATE: - Это обычный текстовый файл. Не файл PHP.

+1

Является ли файл файлом PHP? Класс PHP? – AlexP

+1

Использование анализатора, такого как https://github.com/nikic/PHP-Parser/releases/tag/v0.9.4, может помочь; библиотеки аннотаций, такие как https://github.com/zircote/swagger-php, также могут быть полезны в зависимости от того, что вы хотите делать с комментариями –

+0

На каком языке написан файл? –

ответ

1

Для завершения Dipesh Пармар хороший ответ, пример:

$subject =<<<'LOD' 
sdf df sdf sdf 
sdf sdf sdf sdf 
<?php 
/** 
* Youhou!! 
* 
* HiHa! 
* 
*/ 
LOD; 

$tokens = token_get_all($subject); 

foreach($tokens as $token) { 
    if (is_array($token)&&$token[0]==T_DOC_COMMENT) { 
     echo substr(substr($token[1],4),0,-3); 
     break; 
    } 
} 

Примечание: эта работа, если и только если объект содержит <?php, otherwhise комментарии рассматриваются как простой текст к Tokenizer. Если <?php отсутствует, вы можете легко добавить его перед испытуемым:

$tokens = token_get_all('<?php'.$subject); 

Вы можете сделать это систематически, это не проблема, есть два <?php для решения этой задачи.

+0

Извините Casimir и спасибо за информацию, но ее файл не php, а txt файл. –

+0

@UmakantPatil: Затем он работает, если вы используете трюк в части уведомления. –

6

Вы можете прочитать комментарий с помощью tokenizer

$source = file_get_contents('example.php'); 
$tokens = token_get_all($source); 
+0

Я бы упомянул ранее не файл PHP. Это txt-файл. –

0

Попробуйте /\*{2}\s(.*?)\s\*/

С уважением.

+0

Это не дает мне результата.Может быть, из-за новых символов линии. Для этого я использую preg_match. –

+0

Я вообще не в PHP, но из того, что я нашел в [http://stackoverflow.com/questions/8958310/matching-multiple-lines-pattern-via-php-preg-match](this) обсуждение что-то вроде 'preg_match ('# \ * {2} \ s (. *?) \ s \ */# s', $ str, $ matches);' может сделать трюк. Трюк - это s после конечного разделителя, означающего PCRE_DOTALL, т. Е. '.' будут соответствовать символам новой строки. – ClasG

0

Если файл является PHP класс, то вы можете использовать ReflectionClass::getDocComment и ReflectionMethod::getDocComment

например

$instance = new ClassWithComments(); 
$reflectionClass = new \ReflectionClass($instance); 
echo $reflectionCLass->getDocComment(); 
+0

Извините, это не файл PHP. –

0

стандартная рекомендация использовать парсер вместо регулярных выражений.

однако ^/\*(([^*]*[*]*[^*/])+)\*/ должен сделать трюк в вашем случае. не забудьте включить многострочное сопоставление в вашем движке регулярных выражений. группа захвата 1 содержит результат.

+0

Спасибо, Как бы включить многострочное сопоставление в PHP? –

+0

И даже если я использую это с preg_match, это приведет к ошибке: - Предупреждение: preg_match(): Неизвестный модификатор '*' в test.php в строке 12 –

Смежные вопросы