Intereting Posts
Как вернуть как целочисленный параметр, так и шаблон рендеринга в качестве ответа в Symfony2 Как совместить с regex все специальные символы, кроме «-» в PHP? Исключить маршрут из аутентификации Laravel Как использовать include внутри функции? Как изменить пустую строку на нуль, используя Laravel 5.1? Функции OCI8 не найдены при запуске apache с php5 SELECT LAST_INSERT_ID () работает в Direct MySQL Query, но не прерывается PHP QUERY Уровень изоляции для одного запроса SELECT с помощью PHP mysqli_query PHP strtotime () не возвращает правильный месяц Как отправить дополнительные параметры в полезной нагрузке через уведомление Amazon SNS Push Как сделать AJAX с setInterval в Laravel 5.4 PHP – установка файлов cookie и перенаправление Как удалить обратную косую черту в функции json_encode ()? Почему NSURLSession uploadTaskWithRequest: fromData: не удается загрузить на php-сервер? Как отключить проверку html5 для определенных кнопок в symfony 2.3

Как разобрать блок комментариев PHP-стиля PHP?

Пожалуйста, рассмотрите следующий код, с которым я пытаюсь разобрать только первый комментарий к стилю 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('/@([az]+)\s+(.*?)\s*(?=$|@[az]+\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 ; } ) 

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

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