在正则表达式中包含冒号[:]

时间:2015-03-26 10:20:11

标签: java regex

我有一个要求,其中一个字段应该接受格式1:2:3:4中的值,依此类推。我写了“[0-9] +(:?[0-9] +?)”的模式。如果输入是1:2然后它工作正常,但如果它像1:2:3它不匹配模式,给我一个错误。

3 个答案:

答案 0 :(得分:2)

将正则表达式更改为:

public static void main(String[] args) {
    String s = "1:2:3";
    System.out.println(s.matches("\\d+(:\\d+)*")); // matches single digit followed by 0 or more :[digit]
}

答案 1 :(得分:2)

您的模式:[0-9]+(:?[0-9]+?)表示:一个或多个数字,可选后跟:,后跟一个或多个数字。

1:2:3这样的输入显然与此不匹配 - 您的正则表达式并未表示您可以在第二个数字后面再生成另一个:

如果您想接受由:分隔的任意数量的组,请在该组之后放置*(表示:零次或多次)。并删除?和第二组数字后的:

[0-9]+(:[0-9]+)*

这意味着:一个或多个数字,后跟零次或多次:冒号,可选地后跟一个或多个数字。

答案 2 :(得分:0)

您可以使用此正则表达式:

^\d+(:\d+)*$

用于Java模式:

Pattern p = Pattern.compile("^\\d+(:\\d+)*$");