2014-10-05 112 views
1

我有一個正則表達式如下:Java版本號

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

它valids字符串作爲:1.0.0(軟件版)。

我怎樣才能編輯它,以便有效以及以下字符串?

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

字母數字字符串可以遵循的版本號,但前提是.-(只有一個)。

+0

我已經編輯我的正則表達式...請看看 – 2014-10-05 12:13:05

回答

3

添加非捕獲組.[A-Z]+-[A-Z]+一部分,並使其爲可選。

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

DEMO

如果你想捕捉的字符串部分(由點或連字符前面大寫字母),然後進行非捕獲組捕獲組。

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

DEMO

捕獲並strore只有字母爲獨立的組。

DEMO

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

只要使用這種不太複雜的正則表達式

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

DEMO

+1

@vdenotaris只是使用我的正則表達式。留下你的正則表達式 – 2014-10-05 12:10:33

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

的Java替代 「\」 到 「\\」

0

以防萬一有人需要捕捉的語義版本的正則表達式將有助於做到這一點每個組件:

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

魔女ř將在組1中被捕獲,所述次要在組2中,增量在組3和限定符該組中的4