Как разобрать блок комментариев в стиле phpDoc с PHP? - PullRequest
4 голосов
/ 01 мая 2010

Пожалуйста, рассмотрите следующий код, с помощью которого я пытаюсь проанализировать только первый комментарий в стиле phpDoc (без использования каких-либо других библиотек) в файле (содержимое файла помещено в переменную $ data для целей тестирования):

$data = "
/**
 * @file    A lot of info about this file
 *          Could even continue on the next line
 * @author  me@example.com
 * @version 2010-05-01
 * @todo    do stuff...
 */

/**
 * Comment bij functie bar()
 * @param Array met dingen
 */
function bar($baz) {
  echo $baz;
}
";

$data =  trim(preg_replace('/\r?\n *\* */', ' ', $data));
preg_match_all('/@([a-z]+)\s+(.*?)\s*(?=$|@[a-z]+\s)/s', $data, $matches);
$info = array_combine($matches[1], $matches[2]);
print_r($info)

Это почти работает, за исключением того факта, что все после @todo (включая блок комментария и код bar()) считается значением @todo:

Array (
    [file] => A lot of info about this file Could even continue on the next line
    [author] => me@example.com
    [version] => 2010-05-01
    [todo] => do stuff... /

    /** Comment bij functie bar()
    [param] => Array met dingen /
    function bar() {
      echo ;
    }
)

Как нужно изменить мой код так, чтобы анализировался только первый блок комментария (другими словами: синтаксический анализ должен прекратиться после первого обнаруженного "* /"?

Ответы [ 2 ]

6 голосов
/ 01 мая 2010

Написание парсера с использованием PCRE приведет к неприятностям. Я бы предложил сначала положиться на токенизатор или . Тогда безопаснее будет реализовать синтаксический анализатор для блока doc, который может обрабатывать все ситуации, поддерживаемые форматом phpdoc (что также сделали все библиотеки)

0 голосов
/ 27 марта 2019

Сценарий Php Comment Manager позволяет анализировать комментарии методов DocBloc. Он поддерживает описание метода синтаксического анализа, теги @param и @return. Его можно расширить для поддержки пользовательских тегов DocBloc

...