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

匹配CLI自定义字符集生成字符串的正则表达式编写问题求助

你的正则表达式存在的问题如下
  • 无法识别非连续的重复字符:你当前写的重复校验规则(?!.*([chars])\1{1})只能匹配连续重复的字符(比如aa),对于间隔出现的重复字符(比如aba里的a)完全无法识别,正确的全局无重复校验逻辑应该是^(?!.*(.).*\1),可以匹配任意位置出现两次的相同字符。
  • 重复校验逻辑完全冗余:你分别针对合并字符集、三个分组写了四个重复校验规则,实际上全局的无重复校验已经覆盖了所有分组内的重复校验场景,不需要拆分写多份。
  • 字符集写法冗余:你在字符类中重复写入了abc、1、2等重复字符,字符类中的重复字符会被自动去重,没有实际作用,示例场景下去重后的允许字符集应为[abcAB1234@#$%]。
  • 完全缺失覆盖规则的校验逻辑:你当前的正则没有实现「覆盖指定字符/每个分组至少一个字符」的校验,仅写了无依据的{8,}长度限制。如果要求覆盖所有允许的字符,因为字符不能重复,字符串长度必须等于去重后允许字符的总数量(当前示例为13),同时还要补充每个字符至少出现一次的预查;如果要求覆盖每个分组至少一个字符,需要补充三个预查分别校验每个分组的字符至少出现一次。
  • 语法冗余:\1{1}的写法完全没有必要,\1本身就代表匹配第一个捕获组的1次内容,不需要额外加{1}限定符。

示例场景下的修正正则参考

如果要求为:字符不重复、所有字符属于允许集、每个分组至少覆盖1个字符,修正后正则为:

^(?!.*(.).*\1)(?=.*[abc])(?=.*[abcAB1234])(?=.*[@#1$2%])[abcAB1234@#$%]+$

如果要求为:字符不重复、所有字符属于允许集、覆盖全部允许的13个字符,修正后正则为:

^(?!.*(.).*\1)(?=.*a)(?=.*b)(?=.*c)(?=.*A)(?=.*B)(?=.*1)(?=.*2)(?=.*3)(?=.*4)(?=.*@)(?=.*#)(?=.*\$)(?=.*%)[abcAB1234@#$%]{13}$

内容的提问来源于stack exchange,提问作者Dennis A. Boanini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:39:01