正则表达式匹配由分号分隔的唯一数字

3

我正在尝试查找以下输入和规则的正则表达式:

  • 字符串仅包含数字(1-9和10)和分号“;”作为分隔符
  • 值的数量可以是1到4个
  • 值必须是唯一的

我创建了以下表达式:

^([1-9]|10)(;([1-9]|10)){0,3}$

这句话的意思是除了数字的唯一性外,它覆盖了所有内容。

有效的例子:

1;10
4;3
2
1;2;3;4
10;5;1

无效示例:

10;2;35
1,2,3
7*5;4
;4
1;;2
46
8;10;8
2;1;2 (this one doesn't currently work)

有什么建议可以使匹配值只在唯一时生效?


1
我不认为正则表达式是最好的工具,虽然它应该是可行的。你使用哪种工具/语言?一个有效的答案可能取决于它。 - Sebastian Proske
Java。如果没有其他方法,当然我可以通过代码来处理它,但出于好奇,我想知道是否有其他方法。 - Mikhail Kholodkov
1个回答

3
添加负向前瞻,使用反向引用来强制唯一性:
^([1-9]|10)(?!.*\b\1\b)(;([1-9]|10)(?!.*\b\3\b)){0,3}$

单词边界 \b 的使用是为了防止匹配 110。点击链接查看示例演示。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接