繁体   English   中英

如何用 PHP 解析 phpDoc 样式的注释块?

[英]How to parse a phpDoc style comment block with 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('/@([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 ;
    }
)

我的代码需要如何修改才能只解析第一个注释块(换句话说:解析应该在遇到第一个“*/”后停止?

使用 PCRE 编写解析器会给您带来麻烦。 我建议首先依赖标记器反射 那么实际上为 doc 块实现一个解析器会更安全,它可以处理phpdoc格式支持的所有情况(所有库都结束了)。

Php注释管理器脚本允许解析方法的 DocBloc 注释。 它支持解析方法描述、@param 和@return 标签。 可以扩展以支持自定义 DocBloc 标签

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM