invoke

@JvmName(name = "parse")
operator fun invoke(version: String): SemVersion

解析一个版本号, 将会返回一个 SemVersion, 如果发生解析错误将会抛出一个 IllegalArgumentException 或者 NumberFormatException

对于版本号的组成, 有以下规定:

  • 必须包含主版本号和次版本号

  • 存在 先行版本号 的时候 先行版本号 不能为空

  • 存在 元数据 的时候 元数据 不能为空

  • 核心版本号只允许 x.yx.y.z 的存在

    • 1.0-RC 是合法的

    • 1.0.0-RC 也是合法的, 与 1.0-RC 一样

    • 1.0.0.0-RC 是不合法的, 将会抛出一个 IllegalArgumentException

注意情况:

  • 第一个 + 之后的所有内容全部识别为元数据

    • 1.0+METADATA-M4, metadata="METADATA-M4"

  • 如果不确定版本号是否合法, 可以使用 regex101.com 进行检查

    • 此实现使用的正则表达式为 ^(0|[1-9]\d*)\.(0|[1-9]\d*)(?:\.(0|[1-9]\d*))?(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$