首页 > 关于java的正则表达式

关于java的正则表达式

我是学生 老师布置了一个题目 判断一个一个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());
【热门文章】
【热门文章】