本文中的正则表达式符合语义化版本2.0.0
要点:
1.标准的版本号必须采用X.Y.Z的格式,且为非负的整数,且禁止在数字前方补零。
其中X为主版本号、Y是次版本号、Z为修订号。
正则表达式如下:
(([0-9]|([1-9]([0-9]*))).){2}([0-9]|([1-9]([0-9]*)))
#[0-9]|([1-9]([0-9]*))意思为0-9,或者大于10的数字,即首位不能为0
加上分隔符重复两遍表示了X.Y.,最后一个大括号代表了Z
2.先行版本号可以被标注在修订版之后,先加上一个连接号,再加上一连串以句点分隔的标识符来修饰(没有位数限制)。标识符必须由 ASCII 字母数字和连接号 ([0-9A-Za-z-]) 组成。数字型的标识符禁止在前方补零。
先行版本号的正则表达式如下:
[-](([0-9A-Za-z]|([1-9A-Za-z]([0-9A-Za-z]*)))[.]){0,}([0-9A-Za-z]|([1-9A-Za-z]([0-9A-Za-z]*)))
首位不能为0的处理,可参考要点1
3.版本编译元数据可以被标注在修订版或先行版本号之后,先加上一个加号,再加上一连串以句点分隔的标识符来修饰。标识符必须由 ASCII 字母数字和连接号 ([0-9A-Za-z-]) 组成。
版本编译元数据的正则表达式如下:
[+](([0-9A-Za-z]{1,})[.]){0,}([0-9A-Za-z]{1,})
总正则表达式如下:
^(([0-9]|([1-9]([0-9]*))).){2}([0-9]|([1-9]([0-9]*)))([-](([0-9A-Za-z]|([1-9A-Za-z]([0-9A-Za-z]*)))[.]){0,}([0-9A-Za-z]|([1-9A-Za-z]([0-9A-Za-z]*)))){0,1}([+](([0-9A-Za-z]{1,})[.]){0,}([0-9A-Za-z]{1,})){0,1}$