【发布时间】:2012-12-12 07:24:30
【问题描述】:
我正在尝试使用正则表达式检查文本行。
1,3,4,5,8,10,12,14,19,14
这里的数字用','分隔,并且应该是非负数并且小于或等于20。 而且任何数字都不应该重复。 这是我的模式。
^(?:(?:0[1-9]|[1-9]|1[0-9]|20),)*(?:0[1-9]|[1-9]|1[0-9]|20)$
但它无法检查重复。如何查看?
【问题讨论】:
-
正则表达式不是正确的工具。检查重复项需要内存。仅解析该行并在普通代码中检查所有这些条件会简单得多
-
@PaulPhillips - 实际上我认识一个这样做的人。但我不可能问他。我只是想知道这个机制,我绝对不会在现实生活中使用它。
-
在“真实世界”的正则表达式中它可能是可能的。在理论上它不是。
-
我想可能使用捕获子组和负前瞻的某种组合,但我不知道如何制定它。这肯定不是最有效的方法。
-
为什么你试图用正则表达式而不是真正的代码来做这个?