ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-06-07 00:16:52  阅读:251  来源: 互联网

标签:php comments regex parsing phpdoc


请考虑以下代码,我试图仅解析文件中的第一个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编写解析器会导致麻烦.我建议先依靠tokenizerreflection.然后,为doc块实际实现一个解析器更安全,它可以处理phpdoc格式支持的所有情况(所有libs也要做什么).

标签:php,comments,regex,parsing,phpdoc
来源: https://codeday.me/bug/20190606/1190935.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有