1

想象一下使用正则表达式捕获输入:

2.1_3_4
3.2.1
3.2.1.RELEASE
3.2.1.SNAPSHOT

数字和点很容易得到

([0-9\._]+)

但是你如何捕捉到它加上“RELEASE”或“SNAPHOT”或没有这些?

我玩弄了 or 运算符,但无济于事...

([0-9\._]+RELEASE||SNAPSHOT)  // no worky

顺便说一句,这是一个不错的正则表达式测试器:http: //java-regex-tester.appspot.com/

4

2 回答 2

5

我想你想要这个:

([0-9._]+(RELEASE|SNAPSHOT)?)

(内部)括号形成一个组,问号表示该组可能出现 0 次或 1 次。

于 2013-02-12T05:09:07.073 回答
1

你做的很棒。您只需要进行一些更改。
首先,你不使用||for 或,|被使用。所以RELEASE||SNAPSHOT会转换为RELEASE|SNAPSHOT.
由于发布或快照不是强制性的,?因此应在其后放置 a。所以最终的正则表达式变成

([0-9\._]+(RELEASE|SNAPSHOT)?)

您也可以使用\d代替0-9. 除此之外,没有必要在它出现在里面时.逃脱 所以最后,下面可能是最终的正则表达式\[]

([\d._]+(RELEASE|SNAPSHOT)?)
于 2013-02-12T05:22:14.070 回答