我是学生 老师布置了一个题目 判断一个一个7位数字 即0-9间的一个数字 但是其中数字不能重复 通过输出true与false判断
主要是这样的正则表达式该怎么写?
谢谢大家
强行用正则的方法:
public static void main(String[] args) throws InterruptedException {
Pattern p = Pattern.compile("(\\d)(?!\\1)(\\d)(?!\\1|\\2)(\\d)(?!\\1|\\2|\\3)(\\d)(?!\\1|\\2|\\3|\\4)(\\d)(?!\\1|\\2|\\3|\\4|\\5)(\\d)(?!\\1|\\2|\\3|\\4|\\5|\\6)(\\d)");
Matcher m = p.matcher("2345668");
while(m.find()){
System.out.println(m.group());
}
}
System.out.println("^(?!\\d*?(\\d)\d*?1)\\d{7}$", str);
^(?!.*(.).*\1)\d{7}$
这里有两个技巧,一个是先行断言,一个是反向引用。
先行断言 (?!pattern)
禁止匹配 pattern
,这里用于禁止匹配重复数字。
反向引用 \1
这里引用了之前 (.)
匹配的内容,.*(.).*\1
也就用于匹配重复出现的字符。
合起来意思就是:没有重复字符,由七个数字构成的字符串。
String s = "1234567";
System.out.println(Pattern.matches("^\\d{7}$", s)
&& !Pattern.compile("(\\d)\\d*\\1").matcher(s).find());