具有唯一数字的正则表达式

时间:2018-11-29 10:35:23

标签: java regex

我正在尝试创建一个正则表达式,其唯一数字用逗号分隔,最多5位数字,并且允许1-10之间的数字。例如

1,2,3,4,5-有效

1,2,2,4,5-无效(因为它允许定义重复的数字)

但是我想要一个只能输入唯一数字的正则表达式。 我在正则表达式下面提到的是允许逗号分隔的数字,并允许1-10之间的5位数字。

^([1-9] | 10)(?:,([1-9] | 10)){0,4} $

请帮助定义该仅包含唯一数字的正则表达式

1 个答案:

答案 0 :(得分:1)

您可以使用

^(?!.*\b(\d+)\b.*\b\1\b)(?:[1-9]|10)(?:,(?:[1-9]|10)){0,4}$

查看online regex demo

如果整个单词重复相同的数字块(用单词边界位置包围),则(?!.*\b(\d+)\b.*\b\1\b)否定超前行为将失败。

请参见Java demo

List<String> strs = Arrays.asList("1,2,3,4,5", "1,2,2,4,5");
String rx = "(?!.*\\b(\\d+)\\b.*\\b\\1\\b)(?:[1-9]|10)(?:,(?:[1-9]|10)){0,4}";
for (String str : strs)
    System.out.println(str + ": " + str.matches(rx));

输出:

1,2,3,4,5: true
1,2,2,4,5: false

请注意,Java代码中省略了模式开头和结尾的^$,因为.matches需要完整的字符串匹配。