正则表达式查找具有唯一数字的数字
我想找到没有重复数字的10位数字,例如:
1123456789 //fail, there are two 1's 6758951230 //fail, there are two 5's 6789012345 //pass, each digit occurs once only.
目前我正在使用正则表达式,但只能匹配10个数字(它不会检查重复。我正在使用这个正则表达式:
[0-9]{10}
这可以用正则表达式完成还是有更好的方法来实现这一目标?
这个正则表达式有效:
^(?!.*(.).*\1)\d{10}$
这使用了一个锚定的负面向前看,后面引用断言没有重复的字符。
查看使用示例的实时演示 。
在java中:
if (str.matches("^(?!.*(.).*\\1)\\d{10}")) // number passes
这是最短,最有效的正则表达式,由于存在一个?
。
适用于任何长度的输入:
!/(.).*?\1/.test(number)
例子:
!/(.).*?\1/.test(1234567890) // true !/(.).*?\1/.test(1234567490) // false - note that it also works for repeated chars which are not adjacent.
演示
– 检查重复的数字
– 与你想要的相反,因为rubular不允许!
lancemanfv正则表达式参考https://stackoverflow.com/a/12870549/1366360是一个很棒的,但建议的正则表达式略有偏差。
相反,试试
^(?:([0-9])(?!.*\1)){10}$
这将匹配任何以10位数字开头和结尾的字符串。
如果要检查(并提取)长字符串是否包含10位数字,每个数字不同,请使用此字符
((?:([0-9])(?!.*\2)){10})*
然后,您可以使用带编号的引用来提取匹配的数字
试试这个(?:([0-9])(?!.*\1)){10}
,如果您一次validation一个数字,这将有效。
这应该工作(?:([0-9])(?!\d*\1)){10}
来搜索每个10位数序列的出现,但它会失败12345678901234567890
,会找到最后一个有效部分1234567890
而不是忽略它。
来源和解释: https : //stackoverflow.com/a/12870549/1366360
每次都有效(我看到这个问题) –
修改为在(?! \10 )
断言之前定义Grp 10。 \ 1- \ 9始终被视为backrefs(> \ 10,parenth必须在引用之前)。
所以他们也一样。
注意 – 这可用于查找浮动(子串)10字节数字。 不需要锚点。
Fyi – 使用Perl,无论组号是多少,都可以在定义组之前使用\g{#}
(或\k'name'
)语法。
# "(?:((?!\\1)1)|((?!\\2)2)|((?!\\3)3)|((?!\\4)4)|((?!\\5)5)|((?!\\6)6)|((?!\\7)7)|((?!\\8)8)|((?!\\9)9)|((?!\\10)0)){10}" (?: ( # (1) (?! \1 ) 1 ) | ( # (2) (?! \2 ) 2 ) | ( # (3) (?! \3 ) 3 ) | ( # (4) (?! \4 ) 4 ) | ( # (5) (?! \5 ) 5 ) | ( # (6) (?! \6 ) 6 ) | ( # (7) (?! \7 ) 7 ) | ( # (8) (?! \8 ) 8 ) | ( # (9) (?! \9 ) 9 ) | ( # (10) (?! \10 ) 0 ) ){10}