正则表达式Java版本号

时间:2014-10-05 12:05:58

标签: regex

我有一个正则表达式如下:

(?!\.)(\d+(\.\d+)+)(?![\d\.])$

它将字符串视为:1.0.0(软件版本)。

我如何编辑它以便有效以及以下字符串?

  • 1.0.0-SNAPSHOT
  • 1.0.0.RC
  • 1.0.0-RELEASE

字母数字字符串可以跟随版本号,但仅限于.-(只有一个)。

4 个答案:

答案 0 :(得分:4)

.[A-Z]+-[A-Z]+部分添加非捕获组,并将其设为可选。

(?!\.)(\d+(\.\d+)+)(?:[-.][A-Z]+)?(?![\d.])$

DEMO

如果要捕获字符串部分(以点或连字符开头的大写字母),请将非捕获组设为捕获组。

(?!\.)(\d+(\.\d+)+)([-.][A-Z]+)?(?![\d.])$

DEMO

仅将字母捕获并敲击到单独的组中。

DEMO

(?!\.)(\d+(\.\d+)+)(?:[-.]([A-Z]+))?(?![\d.])$

答案 1 :(得分:1)

使用这个不太复杂的正则表达式

/(\d.){2}\d(?=((-|\.)[A-Z]+)|$)/g

DEMO

答案 2 :(得分:0)

^\d+\.\d+\.\d+[\.\-]?[A-Z]*$

for java replace" \"到" \\"

答案 3 :(得分:0)

万一有人需要捕获语义版本的每个组件,这个正则表达式将有助于实现这一目标:

^(\d+)(?:\.(\d+)(?:\.(\d+))?)?(?:[-.]([A-Z]+))?(?![\d.])$

主要 将在第1组中捕获,第2组 次要 增量 和第4组中的 限定符