/** * Parse a string into a SemVer Version * * @throws InvalidArgumentException * * @param string $string * @return SemVerVersion **/ public static function parse($string) { $matches = Regex::matchSemVer($string); // Parse the SemVer root $version = VersionableParser::parse($matches[1], 'Naneau\\SemVer\\Version'); // There is a pre-release part if (!empty($matches['prerelease'])) { $version->setPreRelease(PreReleaseParser::parse(ltrim($matches['prerelease'], '-'))); } // There is a build number if (!empty($matches['build'])) { $version->setBuild(BuildParser::parse(ltrim($matches['build'], '+'))); } // Return return $version; }
/** * Parse pre release version string * * @param string * @return PreReleaseVersion **/ public static function parse($string) { // Type X.Y.Z, can be parsed as Versionable if (substr_count($string, '.') === 2) { return VersionableParser::parse($string, 'Naneau\\SemVer\\Version\\PreRelease'); } $preRelease = new PreReleaseVersion(); $parts = explode('.', $string); // Sanity check if (count($parts) === 0) { return $preRelease; } // Set the greek name $preRelease->setGreek($parts[0]); // If there's another part it's a release number if (isset($parts[1])) { $preRelease->setReleaseNumber((int) $parts[1]); } return $preRelease; }