我有一个要求,其中一个字段应该接受格式1:2:3:4中的值,依此类推。我写了“[0-9] +(:?[0-9] +?)”的模式。如果输入是1:2然后它工作正常,但如果它像1:2: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+)*$");