我有顶部有评论的文件。
例如
/**
* Comments for file.
*
*/
使用 PHP,我使用 file_get_contents 将文件内容读取到变量中,现在我想在注释中获取值。对于上述示例,预期结果将是
* Comments for file
*
*
这意味着我想要那些 /** 和 */ 中的内容。这个文件可以有多个评论,但我想要第一个位于文件顶部的评论。
请问有什么想法/帮助吗?
更新:- 这是普通的文本文件。不是 PHP 文件。
您可以使用标记器阅读评论
$source = file_get_contents('example.php');
$tokens = token_get_all($source);
为了完成 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
这个任务有两个不是问题。
如果文件是一个PHP
类,那么你可以使用ReflectionClass::getDocComment
andReflectionMethod::getDocComment
例如
$instance = new ClassWithComments();
$reflectionClass = new \ReflectionClass($instance);
echo $reflectionCLass->getDocComment();
标准建议是使用解析器而不是正则表达式。
但是^/\*(([^*]*[*]*[^*/])+)\*/
应该在您的情况下解决问题。请记住在您的正则表达式引擎中启用多行匹配。捕获组 1 包含结果。
尝试/\*{2}\s(.*?)\s\*/
问候。