0

我有顶部有评论的文件。

例如

/**
 * Comments for file.
 *
 */

使用 PHP,我使用 file_get_contents 将文件内容读取到变量中,现在我想在注释中获取值。对于上述示例,预期结果将是

* Comments for file
*
*

这意味着我想要那些 /** 和 */ 中的内容。这个文件可以有多个评论,但我想要第一个位于文件顶部的评论。

请问有什么想法/帮助吗?

更新:- 这是普通的文本文件。不是 PHP 文件。

4

5 回答 5

6

您可以使用标记器阅读评论

$source = file_get_contents('example.php');
$tokens = token_get_all($source);
于 2013-08-27T12:12:07.967 回答
1

为了完成 Dipesh Parmar 的好答案,举个例子:

$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,否则注释被标记器视为简单文本。如果<?php缺少,您可以轻松地将其添加到主题之前:

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

你可以系统地做,<?php这个任务有两个不是问题。

于 2013-08-27T12:29:43.357 回答
0

如果文件是一个PHP类,那么你可以使用ReflectionClass::getDocCommentandReflectionMethod::getDocComment

例如

$instance = new ClassWithComments();
$reflectionClass = new \ReflectionClass($instance);
echo $reflectionCLass->getDocComment();
于 2013-08-27T12:14:22.357 回答
0

标准建议是使用解析器而不是正则表达式。

但是^/\*(([^*]*[*]*[^*/])+)\*/应该在您的情况下解决问题。请记住在您的正则表达式引擎中启用多行匹配。捕获组 1 包含结果。

于 2013-08-27T12:14:56.233 回答
0

尝试/\*{2}\s(.*?)\s\*/

问候。

于 2013-08-27T12:12:18.360 回答