在PHP中获取注释注释,我收到了一条评论电子邮件

时间:2016-10-01 23:15:12

标签: php annotations

我在PHP中创建一个ORM,我认为在注释注释中注释表,列,数据库等,可能是一个好主意。

要获得评论注释,我试试这个

How to find annotations in a PHP5 object?

但我有一些问题,包括一些电子邮件,或其他不是注释的文本,如果它们有@字符。

这是我的功能:

public function getAnnotationArrayFromDocComment($docComment) {
    $annotationsArray = [];
    preg_match_all('#@(.*?)\n#s', $docComment, $annotations);
    foreach ($annotations[1] as $annotation) {
        $explotedAnnotation = explode(" ", $annotation);
        if (isset($explotedAnnotation[1])) $annotationsArray[trim($explotedAnnotation[0])] = trim($explotedAnnotation[1]);
        else $annotationsArray[trim($explotedAnnotation[0])] = "";
    }
    return $annotationsArray;
}

基本上,这个函数返回一个具有这种结构的数组:

["annotation" => "valueOfAnnotation"]

我很清楚只会得到第一个字的“错误”,我的下一步就是解决这个问题。

这里的问题是,对于某些评论,如果评论有一些电子邮件地址,或其他带有@字符的文本,它们就像注释一样出现在数组中,例如:

/**
 * Created by Someone <email@example.com>
 * This class do anything
 * 
 * @package namespace
 */

我希望这次回归:

["package" => "namespace"]

但这回归:

["example.com>" => "", "package" => "namespace"]

¿有人有这个想法吗?

感谢和抱歉我的英语有任何错误,这不是我的自然语言。

1 个答案:

答案 0 :(得分:2)

在电子邮件地址中,@始终只是关闭其他字符,而在实际注释中,它始终至少有一个空格。

所以你可能只是改变你的正则表达式来反映:

    preg_match_all('# @(.*?)\n#s', $docComment, $annotations);

并且它没有任何其他工作正常,因为在你的功能中你已经trim()注释......到目前为止这是无用的。)