繁体   English   中英

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

[英]regex to find numbers with unique digits

我想找到没有重复数字的 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

试试这个(?:([0-9])(?!.*\\1)){10} ,如果你一次验证一个数字,这将起作用。

这应该工作(?:([0-9])(?!\\d*\\1)){10}来搜索唯一的 10 位序列的每次出现,但它会失败12345678901234567890 ,会找到最后一个有效部分1234567890而不是忽略它。

来源和解释: https : //stackoverflow.com/a/12870549/1366360

下面是用更少的回溯最短高效的正则表达式因的存在? .

适用于任何长度的输入:

!/(.).*?\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})*

然后,您可以使用编号引用来提取匹配的编号

每次都有效(我看到这个问题)-

修改为在(?! \\10 )断言之前定义 Grp 10。 \\1-\\9 始终被视为反向引用(> \\10,括号必须在引用之前)。
所以让他们都一样。

注意 - 这可用于查找浮动(子字符串)10 个唯一数字。 不需要锚点。
仅供参考 - 使用 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}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM