正则表达式允许在字符串中使用连字符(最多 3 个),但不计算 JAVA 中的长度

RegEx to allow hyphens (maximum 3) in a string but do not count it in length in JAVA

我的要求是将输入字符串的长度限制为 11,可以是带连字符的字母数字。允许的最大连字符数为 3,不应考虑连字符的长度。另一个要求是连续重复数字不能超过5个。

我的正则表达式是 ^(?!.*([0-9])\1{5})(?=.*([-]){0,3})[a-zA-Z0-9]{11}$

非常感谢任何帮助。

好吧,一种方法是:

^(?!.*?(\d){5})(?=(?:[a-z0-9]-?){11}$)[a-z0-9]+(?:-[a-z0-9]+){0,3}$

在线查看demo


  • ^ - Start-line锚点;
  • (?!.*?(\d){5}) - 断言输入的否定前瞻没有重复 6 次的数字;
  • (?=(?:[a-z0-9]-?){11}$) - 肯定前瞻断言输入有 11 个字母数字字符(带有可选的连字符);
  • [a-z0-9]+(?:-[a-z0-9]+){0,3} - 1+ Alnum 字符后跟 non-capture 组(0-3 次)以允许使用连字符;
  • $ - End-line锚.

请注意,它不允许连字符位于以下任一位置:开始、结束或连续。进一步注意,我使用了 case-insensitive 标志。