src/Debug/PhpDoc.php
private static function parseTags($str)
    {
        $regexNotTag = '(?P<value>(?:(?!^@).)*)';
        $regexTags = '#^@(?P<tag>[\w-]+)[ \t]*'.$regexNotTag.'#sim';
        \preg_match_all($regexTags, $str, $matches, PREG_SET_ORDER);
        $singleTags = array('return');
        foreach ($matches as $match) {
            $value = $match['value'];
            $value = \preg_replace('/\n\s*\*\s*/', "\n", $value);
            $value = \trim($value);
            $value = self::parseTag($match['tag'], $value);
            if (\in_array($match['tag'], $singleTags)) {
                $return[ $match['tag'] ] = $value;
            } else {
                $return[ $match['tag'] ][] = $value;
            }
        }
        return $return;
    }
private static function parseTags($str)
    {
        $regexNotTag = '(?P<value>(?:(?!^@).)*)';
        $regexTags = '#^@(?P<tag>[\w-]+)[ \t]*'.$regexNotTag.'#sim';
        \preg_match_all($regexTags, $str, $matches, PREG_SET_ORDER);
        $singleTags = array('return');
        foreach ($matches as $match) {
            $value = $match['value'];
            $value = \preg_replace('/\n\s*\*\s*/', "\n", $value);
            $value = \trim($value);
            $value = self::parseTag($match['tag'], $value);
            if (\in_array($match['tag'], $singleTags)) {
                $return[ $match['tag'] ] = $value;
            } else {
                $return[ $match['tag'] ][] = $value;
            }
        }
        return $return;
    }
Parse tags

@param string $str portion of phpdoc content that contains tags

@return array