关于java的正则表达式

KNaive
  • 5
新手上路,请多包涵

我是学生 老师布置了一个题目 判断一个一个7位数字 即0-9间的一个数字 但是其中数字不能重复 通过输出true与false判断
主要是这样的正则表达式该怎么写?
谢谢大家

回复
阅读 3.1k
4 个回答

强行用正则的方法:


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());
        }
        
    }
String s = "1234567";
System.out.println(Pattern.matches("^\\d{7}$", s)
    && !Pattern.compile("(\\d)\\d*\\1").matcher(s).find());
System.out.println("^(?!\\d*?(\\d)\d*?1)\\d{7}$", str);
eph
  • 2k

^(?!.*(.).*\1)\d{7}$

这里有两个技巧,一个是先行断言,一个是反向引用。

先行断言 (?!pattern) 禁止匹配 pattern,这里用于禁止匹配重复数字。

反向引用 \1 这里引用了之前 (.) 匹配的内容,.*(.).*\1 也就用于匹配重复出现的字符。

合起来意思就是:没有重复字符,由七个数字构成的字符串。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏