You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java正则匹配问题:如何验证固定长度字符串中所有字符唯一

解决Java正则匹配固定长度且所有字符唯一的问题

正则表达式方案

要同时满足8位大小写字母且所有字符互不重复,可以使用结合正向预查和负向预查的正则表达式:

String regex = "^(?=[a-zA-Z]{8}$)(?!.*(.).*\\1).*$";

正则规则拆解

  • ^(?=[a-zA-Z]{8}$):正向先行断言,先确保整个字符串是严格8位的大小写字母,不符合长度或字符范围的直接排除
  • (?!.*(.).*\\1):负向先行断言,检查字符串中是否存在重复字符。(.)捕获任意单个字符,.*\\1表示该字符在后续位置再次出现,只要存在这种情况就匹配失败
  • .*$:匹配整个符合条件的字符串

Java代码示例

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UniqueCharValidator {
    public static void main(String[] args) {
        String regex = "^(?=[a-zA-Z]{8}$)(?!.*(.).*\\1).*$";
        Pattern pattern = Pattern.compile(regex);

        String a = "abcdefgz";
        String b = "aacdefgz";
        String c = "abcdefghz";

        // 验证字符串a
        Matcher matcherA = pattern.matcher(a);
        System.out.println("String a: " + (matcherA.matches() ? "pass" : "fail")); // 输出pass

        // 验证字符串b
        Matcher matcherB = pattern.matcher(b);
        System.out.println("String b: " + (matcherB.matches() ? "pass" : "fail")); // 输出fail

        // 验证字符串c
        Matcher matcherC = pattern.matcher(c);
        System.out.println("String c: " + (matcherC.matches() ? "pass" : "fail")); // 输出fail
    }
}

补充说明

  • 这个正则通过两个断言组合,先锁定长度和字符范围,再排除重复字符,刚好满足你的需求
  • 针对8位长度的字符串,该正则的性能完全够用;如果是更长的字符串,这种正则的效率会有所下降,但你的场景无需担心

内容的提问来源于stack exchange,提问作者Philipp.kby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:35:50