public static function parse($string)
    {
        // Explode over '.'
        $parts = explode('.', $string);

        // Instantiate
        $buildVersion = new BuildVersion;

        // No parts is no build?
        if (count($parts) === 0) {
            return $buildVersion;
        }

        // Discard "build" string should it prepend the build
        if ($parts[0] === 'build') {
            array_shift($parts);
        }

        // If the first part is a number it's the build number
        if (isset($parts[0]) && is_numeric($parts[0])) {
            $buildVersion->setNumber(
                (int) array_shift($parts)
            );
        }

        // All other parts are custom and can simply be put on a stack
        foreach ($parts as $part) {
            $buildVersion->addPart($part);
        }

        // Return
        return $buildVersion;
    }