在字符串中查找注释

时间:2013-08-27 12:08:32

标签: php regex file comments

我的文件顶部有评论。

e.g。

/**
 * Comments for file.
 *
 */

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

* Comments for file
*
*

这意味着我希望内容包含在/ **和* /中。这个文件可以有多个注释,但我想要第一个位于文件顶部的文件。

有任何想法/帮助吗?

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

5 个答案:

答案 0 :(得分:6)

您可以使用tokenizer

阅读评论
$source = file_get_contents('example.php');
$tokens = token_get_all($source);

答案 1 :(得分: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不是问题。

答案 2 :(得分:0)

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

问候。

答案 3 :(得分:0)

如果文件是PHP类,那么您可以使用ReflectionClass::getDocCommentReflectionMethod::getDocComment

e.g

$instance = new ClassWithComments();
$reflectionClass = new \ReflectionClass($instance);
echo $reflectionCLass->getDocComment();

答案 4 :(得分:0)

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

然而^/\*(([^*]*[*]*[^*/])+)\*/应该可以解决您的问题。记得在你的正则表达式引擎中启用多行匹配。捕获组1包含结果。