[英]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
而不是忽略它。
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.