Java Regex是否匹配特定字符串或其他特定字符串,或者根本不匹配?

时间:2013-02-12 05:06:10

标签: java regex

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

2.1_3_4
3.2.1
3.2.1.RELEASE
3.2.1.SNAPSHOT

数字和点数很容易获得

([0-9\._]+)

但你怎么捕获那个加上“RELEASE”或“SNAPHOT”或者没有一个?

我和操作员玩弄无济于事......

([0-9\._]+RELEASE||SNAPSHOT)  // no worky
不过,这是一个很好的正则表达式测试器:http://java-regex-tester.appspot.com/

2 个答案:

答案 0 :(得分:5)

我想你想要这个:

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

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

答案 1 :(得分:1)

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

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

您也可以使用\d代替0-9。 除此之外,当.位于\内时,[]无需转义([\d._]+(RELEASE|SNAPSHOT)?) 所以最后,以下可能是最终的正则表达式

{{1}}